<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Re: GCC Clobbering Branch Predict Bit in CF3 Cores in ColdFire/68K Microcontrollers and Processors</title>
    <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300238#M12092</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="color: #ff6600; font-size: 12pt;"&gt;&lt;STRONG&gt;I'd be interested in seeing the assembly output or disassembly of the following code using "your favourite compiler":&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;int bitcount(int bits)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nRes = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="min-height: 8pt; height: 8pt; padding: 0px; padding-left: 30px;"&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x01) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x02) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x04) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x08) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x10) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return nRes;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;Using vbcc I get:&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14277774441192418" jivemacro_uid="_14277774441192418"&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;_bitcount:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; subq.l #4,sp&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; movem.l d2,(sp)&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; move.l (8,sp),d2&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #0,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #1,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_3e8&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_3e8:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_3f0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_3f0:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #4,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_3f8&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_3f8:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #8,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_400&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_400:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #$10,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_408&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_408:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; move.l d1,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; movem.l (sp),d2&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #4,sp&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; rts&lt;/P&gt;


&lt;/PRE&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;I count 62 bytes so it did ok in size and avoids writing to the CCR. Performance would be better on a superscalar CPU like the 68060 or CF v5 with early instruction completion and forwarding of MOVEQ.&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;A couple of notes about vbcc:&lt;/P&gt;&lt;P&gt;It uses the stack instead of a stack frame by default as it generates better code (especially on the 68k with a MOVEM supporting pre-decrement and post-increment).&lt;/P&gt;&lt;P&gt;Vbcc has the best 68k (and maybe ColdFire) peephole optimizing assembler ever in vasm.&lt;/P&gt;&lt;P&gt;The vclib link library and inlines for vbcc are written by 68k enthusiasts and are becoming more optimized. Send in your optimized CF code to have it included.&lt;/P&gt;&lt;P&gt;The 68k/ColdFire backend is too simple and needs improvement but bugs are fixed. There is no instruction scheduler yet.&lt;/P&gt;&lt;P&gt;The original idea of vbcc was to let the peephole optimizing assembler optimize instructions like MOVEM-&amp;gt;MOVE above but it can't for a data register because of the CC flags.&lt;/P&gt;&lt;P&gt;The source code for vbcc, vasm and vlink are online and there are few dependencies. I compile them with themselves on my 68060 Amiga.&lt;/P&gt;&lt;P&gt;I was able to compile with -cpu=5329 to generate CF code into my Amiga Hunk format executable as the backend for 68k and ColdFire is shared.&lt;/P&gt;&lt;P&gt;Vbcc was originally targeted at embedded but has become popular for retro computers and processors also. C99 support is pretty good and improving.&lt;/P&gt;&lt;P&gt;The Atari (ColdFire) Firebee is supported and an Amiga FPGA 68k processor should be mostly ColdFire compatible and at least partially supported.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 31 Mar 2015 04:48:18 GMT</pubDate>
    <dc:creator>matthey</dc:creator>
    <dc:date>2015-03-31T04:48:18Z</dc:date>
    <item>
      <title>GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300232#M12086</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've searched for this apparent bug on gcc.gnu.org/bugzilla, but didn't find anything.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Many of those reading this will be using Code Warrior, and I assume this doesn't apply to you. I'd be interested in seeing the compiler's generated code for bit testing to see if it is every doing this though.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;$ m68k-elf-gcc --version&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;m68k-elf-gcc.exe (Sourcery G++ Lite 4.3-208) 4.3.3&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;Copyright (C) 2008 Free Software Foundation, Inc.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The command line is:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;m68k-elf-gcc -MD -MF adl3.d0 -gdwarf-2 -mcpu=5329 -Wall -std=c99 -g&amp;nbsp; -Os ...&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note the "-mcpu=5329" line.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A small snippet of source code:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;#define cd_BUS_OFF 0x2000&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;#define cd_BUS_OFF 0x1000&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;#define cd_OVERRUN 0x0008&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (cc-&amp;gt;status &amp;amp; cd_BUS_OFF) {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40109020:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 202a 003c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movel %a2@(60),%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40109024:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0800 000d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #13,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40109028:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6710&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 4010903a &amp;lt;comm_check_status+0x58&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;(other code)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (cc-&amp;gt;status &amp;amp; cd_BUS_RWARN) {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;4010903a:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0800 000c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #12,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;4010903e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6604&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bnes 40109044 &amp;lt;comm_check_status+0x62&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else if (cc-&amp;gt;status &amp;amp; cd_OVERRUN) {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40109040:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 44c0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;&lt;STRONG&gt;movew %d0,%ccr&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40109042:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6a02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bpls 40109046 &amp;lt;comm_check_status+0x64&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Note the weird word-saving trick in the last compare? It copies the data to the CCR and then tests the "N" bit.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It only seems to do this trick for the "N" and "Z" bits (bits 2 and 3). it should be able to do it for "C" and "V" (0 and 1), but I haven't seen any code doing this. I've also seen code like:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;4012193e:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 44c2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movew %d2,%ccr&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40121940:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 57c0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; seq %d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40121942:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 44c2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movew %d2,%ccr&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;40121944:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5bc1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; smi %d1&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What's the problem? Bit 7 of the CCR is documented in the CFPRM and MCF5329 Reference Manual as:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Branch prediction (Version 3 only). Alters the static&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; prediction algorithm used by the branch acceleration&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logic in the instruction fetch pipeline on forward&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; conditional branches. Refer to a V3 core or device&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; user’s manual for further information on this bit.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So the use of the "movew %d0,%ccr" instruction is changing the CPU's branch prediction randomly. It shouldn't be doing that.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does anyone know if this was ever fixed?&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 19 May 2014 06:43:51 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300232#M12086</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2014-05-19T06:43:51Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300233#M12087</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So why is this a problem?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;With the prediction bit changed, all forward branches (exits out of a loop) will be mis-predicted as taken. That makes them take FIVE times as long to execute as when predicted as not taken.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This could make fast inner loops have variable execution times depending on what the last bit-test instruction data had in the 8th bit.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From the CodeSourcery Mailing List I received the following suggestion:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive-quote" style="color: #000000; padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;Have you tried instructing GCC to avoid the use of the CCR register &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;using "-ffixed-ccr"?&lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;Thank you for that suggestion. Unfortunately:&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;$ m68k-elf-gcc -c -Os -ffixed-ccr -o mmOsccr m68kbits.c&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;cc1.exe: warning: unknown register name: ccr&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;That option works with other register names like "d0", "sp", "a1".&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;It still did this:&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 1a:&amp;nbsp; 44c1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movew %d1,%ccr&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 1c:&amp;nbsp; 6a02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bpls 20 &amp;lt;main+0x20&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;it doesn't help that the libraries are all full of this construct.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;$ m68k-elf-objdump -S libc.a | grep ccr | wc&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 89&amp;nbsp;&amp;nbsp;&amp;nbsp; 356&amp;nbsp;&amp;nbsp;&amp;nbsp; 3470&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P&gt;So even if you try and actively bypass or correct for this corruption, lots of the standard C library functions will corrupt it back for you.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then another exchange:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive-quote" style="color: #000000; padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;Hmm, too bad. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;If it's really an "over-optimization" of the compiler you can try to &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;disable optimizations (-O0) and check whether the problem persists. &lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;The code gets horrible without any optimisations: &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;-O2: &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; c:&amp;nbsp;&amp;nbsp; 0801 0001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #1,%d1 &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 10:&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 14 &amp;lt;main+0x14&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;No optimisation, note the TWO redundant instructions. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp;&amp;nbsp; 7001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq #1,%d0 &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; a:&amp;nbsp;&amp;nbsp; c0ae 0008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andl %fp@(8),%d0 &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; e:&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveb %d0,%d0 &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 10:&amp;nbsp;&amp;nbsp; 4a00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tstb %d0 &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 12:&amp;nbsp;&amp;nbsp; 6704&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 18 &amp;lt;main+0x18&amp;gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;BLOCKQUOTE class="jive-quote" style="color: #000000; padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;If it doesn't, turn optimizations back on &lt;/SPAN&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;Another good suggestion. I'll try that tomorrow. &lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;The problem is with whoever put this misguided "feature" into the CF3 Condition Code Register. They should have&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;known at the time that compilers were free to use this trick, and probably had been doing this since the 68000.&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt; The feature should have been in a different special register, or been able to be enabled and disabled in a&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt; different control register.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #ff6600; font-size: 12pt;"&gt;&lt;STRONG&gt;I'd be interested in seeing the assembly output or disassembly of the following code using "your favourite compiler":&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;int bitcount(int bits)&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nRes = 0;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x01) nRes++;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x02) nRes++;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x04) nRes++;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x08) nRes++;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x10) nRes++;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return nRes;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Compiled with the following gcc command line this results in:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;$ m68k-elf-gcc --version&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;m68k-elf-gcc.exe (Sourcery G++ Lite 4.3-208) 4.3.3&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;$ m68k-elf-gcc -c -mcpu=5235 -O2 -o bits bits.c&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;$ m68k-elf-objdump -S bits&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;00000000 &amp;lt;bitcount&amp;gt;:&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; 0:&amp;nbsp;&amp;nbsp; 7001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq #1,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; 2:&amp;nbsp;&amp;nbsp; 4e56 0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linkw %fp,#0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; 6:&amp;nbsp;&amp;nbsp; 222e 0008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movel %fp@(8),%d1&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; a:&amp;nbsp;&amp;nbsp; c081&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andl %d1,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp; c:&amp;nbsp;&amp;nbsp; 0801 0001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #339966;"&gt;&lt;STRONG&gt;btst #1,%d1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 10:&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #339966;"&gt;&lt;STRONG&gt;beqs 14 &amp;lt;bitcount+0x14&amp;gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 12:&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 14:&amp;nbsp;&amp;nbsp; 44c1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="; color: #ff0000;"&gt;&lt;STRONG&gt;movew %d1,%ccr&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 16:&amp;nbsp;&amp;nbsp; 6602&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;&lt;STRONG&gt;bnes 1a &amp;lt;bitcount+0x1a&amp;gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 18:&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 1a:&amp;nbsp;&amp;nbsp; 44c1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;&lt;STRONG&gt;movew %d1,%ccr&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 1c:&amp;nbsp;&amp;nbsp; 6a02&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #ff0000;"&gt;&lt;STRONG&gt;bpls 20 &amp;lt;bitcount+0x20&amp;gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 1e:&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 20:&amp;nbsp;&amp;nbsp; 0801 0004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #339966;"&gt;&lt;STRONG&gt;btst #4,%d1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 24:&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #339966;"&gt;&lt;STRONG&gt;beqs 28 &amp;lt;bitcount+0x28&amp;gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 26:&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 28:&amp;nbsp;&amp;nbsp; 4e5e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unlk %fp&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp; 2a:&amp;nbsp;&amp;nbsp; 4e75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rts&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The &lt;SPAN style="color: #339966;"&gt;&lt;STRONG&gt;GREEN&lt;/STRONG&gt;&lt;/SPAN&gt; lines are using "normal" bit tests that don't corrupt the ccr. The &lt;SPAN style="color: #ff0000;"&gt;&lt;STRONG&gt;RED&lt;/STRONG&gt;&lt;/SPAN&gt; ones are using the one-word "shortcut".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 22 May 2014 04:38:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300233#M12087</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2014-05-22T04:38:59Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300234#M12088</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;gt; &lt;SPAN style="color: #ff6600; font-size: 12pt;"&gt;&lt;STRONG&gt;I'd be interested in seeing the assembly output or disassembly of the following code using "your favourite compiler":&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;According to this post, CodeWarrior 10.4 has a "gcc option".&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A _jive_internal="true" href="https://community.nxp.com/thread/307204" title="https://community.freescale.com/thread/307204"&gt;https://community.freescale.com/thread/307204&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I don't have CW. Does this mean there's an option to use either compiler for a project?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would be interested to see if the gcc compiler provided by Freescale generate code with this problem for the CF3 parts.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also what code the Freescale tools generate for the same source.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 23 May 2014 05:49:35 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300234#M12088</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2014-05-23T05:49:35Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300235#M12089</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I know this was an old post but thought that you might still be interested.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;First of all I tried my later version of Codesourcery GCC and it has the identical output that you have.&amp;nbsp; My version is:&lt;/P&gt;&lt;P&gt;m68k-elf-cpp (Sourcery CodeBench 2012.09-80) 4.7.2&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Using the Codewarrior 10.2 for Linux which uses the Metrowerks compiler, with no optimisations:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;0x00000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bitcount:&lt;/P&gt;&lt;P&gt;0x00000000&amp;nbsp; 0x4E560000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; link&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a6,#0&lt;/P&gt;&lt;P&gt;0x00000004&amp;nbsp; 0x518F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subq.l&amp;nbsp;&amp;nbsp; #8,a7&lt;/P&gt;&lt;P&gt;0x00000006&amp;nbsp; 0x2D40FFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-8(a6)&lt;/P&gt;&lt;P&gt;0x0000000A&amp;nbsp; 0x7000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d0&lt;/P&gt;&lt;P&gt;0x0000000C&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000010&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000014&amp;nbsp; 0x08000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d0&lt;/P&gt;&lt;P&gt;0x00000018&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000024&lt;/P&gt;&lt;P&gt;0x0000001A&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x0000001E&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000020&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000024&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000028&amp;nbsp; 0x08000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x0000002C&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000038&lt;/P&gt;&lt;P&gt;0x0000002E&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000032&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000034&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000038&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x0000003C&amp;nbsp; 0x08000002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #2,d0&lt;/P&gt;&lt;P&gt;0x00000040&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x0000004c&lt;/P&gt;&lt;P&gt;0x00000042&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000046&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000048&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x0000004C&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000050&amp;nbsp; 0x08000003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #3,d0&lt;/P&gt;&lt;P&gt;0x00000054&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000060&lt;/P&gt;&lt;P&gt;0x00000056&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x0000005A&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x0000005C&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000060&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000064&amp;nbsp; 0x08000004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,d0&lt;/P&gt;&lt;P&gt;0x00000068&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000074&lt;/P&gt;&lt;P&gt;0x0000006A&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x0000006E&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000070&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000074&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000078&amp;nbsp; 0x4E5E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unlk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a6&lt;/P&gt;&lt;P&gt;0x0000007A&amp;nbsp; 0x4E75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Same again but with optimisation set to 2:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;0x00000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bitcount:&lt;/P&gt;&lt;P&gt;0x00000000&amp;nbsp; 0x4E560000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; link&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a6,#0&lt;/P&gt;&lt;P&gt;0x00000004&amp;nbsp; 0x518F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subq.l&amp;nbsp;&amp;nbsp; #8,a7&lt;/P&gt;&lt;P&gt;0x00000006&amp;nbsp; 0x2D40FFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-8(a6)&lt;/P&gt;&lt;P&gt;0x0000000A&amp;nbsp; 0x7200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d1&lt;/P&gt;&lt;P&gt;0x0000000C&amp;nbsp; 0x2D41FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d1,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000010&amp;nbsp; 0x08000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d0&lt;/P&gt;&lt;P&gt;0x00000014&amp;nbsp; 0x6708&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x0000001e&lt;/P&gt;&lt;P&gt;0x00000016&amp;nbsp; 0x7000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d0&lt;/P&gt;&lt;P&gt;0x00000018&amp;nbsp; 0x7001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x0000001A&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x0000001E&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000022&amp;nbsp; 0x08000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000026&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000032&lt;/P&gt;&lt;P&gt;0x00000028&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x0000002C&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x0000002E&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000032&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000036&amp;nbsp; 0x08000002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #2,d0&lt;/P&gt;&lt;P&gt;0x0000003A&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000046&lt;/P&gt;&lt;P&gt;0x0000003C&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000040&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000042&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000046&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x0000004A&amp;nbsp; 0x08000003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #3,d0&lt;/P&gt;&lt;P&gt;0x0000004E&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x0000005a&lt;/P&gt;&lt;P&gt;0x00000050&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000054&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000056&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x0000005A&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x0000005E&amp;nbsp; 0x08000004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,d0&lt;/P&gt;&lt;P&gt;0x00000062&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x0000006e&lt;/P&gt;&lt;P&gt;0x00000064&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000068&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x0000006A&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x0000006E&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000072&amp;nbsp; 0x4E5E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unlk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a6&lt;/P&gt;&lt;P&gt;0x00000074&amp;nbsp; 0x4E75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Same again with optimisation set to 4:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;0x00000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _bitcount:&lt;/P&gt;&lt;P&gt;0x00000000&amp;nbsp; 0x4E560000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; link&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a6,#0&lt;/P&gt;&lt;P&gt;0x00000004&amp;nbsp; 0x518F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; subq.l&amp;nbsp;&amp;nbsp; #8,a7&lt;/P&gt;&lt;P&gt;0x00000006&amp;nbsp; 0x2D40FFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-8(a6)&lt;/P&gt;&lt;P&gt;0x0000000A&amp;nbsp; 0x7200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d1&lt;/P&gt;&lt;P&gt;0x0000000C&amp;nbsp; 0x2D41FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d1,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000010&amp;nbsp; 0x08000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #0,d0&lt;/P&gt;&lt;P&gt;0x00000014&amp;nbsp; 0x6706&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x0000001c&lt;/P&gt;&lt;P&gt;0x00000016&amp;nbsp; 0x7201&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,d1&lt;/P&gt;&lt;P&gt;0x00000018&amp;nbsp; 0x2D41FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d1,-4(a6)&lt;/P&gt;&lt;P&gt;0x0000001C&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000020&amp;nbsp; 0x08000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000024&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000030&lt;/P&gt;&lt;P&gt;0x00000026&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x0000002A&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x0000002C&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000030&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000034&amp;nbsp; 0x08000002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #2,d0&lt;/P&gt;&lt;P&gt;0x00000038&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000044&lt;/P&gt;&lt;P&gt;0x0000003A&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x0000003E&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000040&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000044&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x00000048&amp;nbsp; 0x08000003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #3,d0&lt;/P&gt;&lt;P&gt;0x0000004C&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x00000058&lt;/P&gt;&lt;P&gt;0x0000004E&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000052&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000054&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x00000058&amp;nbsp; 0x202EFFF8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -8(a6),d0&lt;/P&gt;&lt;P&gt;0x0000005C&amp;nbsp; 0x08000004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #4,d0&lt;/P&gt;&lt;P&gt;0x00000060&amp;nbsp; 0x670A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beq.s&amp;nbsp;&amp;nbsp;&amp;nbsp; *+12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ; 0x0000006c&lt;/P&gt;&lt;P&gt;0x00000062&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000066&amp;nbsp; 0x5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addq.l&amp;nbsp;&amp;nbsp; #1,d0&lt;/P&gt;&lt;P&gt;0x00000068&amp;nbsp; 0x2D40FFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; d0,-4(a6)&lt;/P&gt;&lt;P&gt;0x0000006C&amp;nbsp; 0x202EFFFC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; move.l&amp;nbsp;&amp;nbsp; -4(a6),d0&lt;/P&gt;&lt;P&gt;0x00000070&amp;nbsp; 0x4E5E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unlk&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; a6&lt;/P&gt;&lt;P&gt;0x00000072&amp;nbsp; 0x4E75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Interestly, I tried using the Netburner GCC based compiler and found this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;00000000 &amp;lt;bitcount&amp;gt;:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 0:&amp;nbsp;&amp;nbsp;&amp;nbsp; 4e56 0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linkw %fp,#0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 4:&amp;nbsp;&amp;nbsp;&amp;nbsp; 222e 0008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; movel %fp@(8),%d1&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; 8:&amp;nbsp;&amp;nbsp;&amp;nbsp; 7001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; moveq #1,%d0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; a:&amp;nbsp;&amp;nbsp;&amp;nbsp; c081&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; andl %d1,%d0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; c:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0801 0001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #1,%d1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 10:&amp;nbsp;&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 14 &amp;lt;bitcount+0x14&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 12:&amp;nbsp;&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/P&gt;&lt;P&gt;&amp;nbsp; 14:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0801 0002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #2,%d1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 18:&amp;nbsp;&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 1c &amp;lt;bitcount+0x1c&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 1a:&amp;nbsp;&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/P&gt;&lt;P&gt;&amp;nbsp; 1c:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0801 0003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #3,%d1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 20:&amp;nbsp;&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 24 &amp;lt;bitcount+0x24&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 22:&amp;nbsp;&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/P&gt;&lt;P&gt;&amp;nbsp; 24:&amp;nbsp;&amp;nbsp;&amp;nbsp; 0801 0004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btst #4,%d1&lt;/P&gt;&lt;P&gt;&amp;nbsp; 28:&amp;nbsp;&amp;nbsp;&amp;nbsp; 6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; beqs 2c &amp;lt;bitcount+0x2c&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; 2a:&amp;nbsp;&amp;nbsp;&amp;nbsp; 5280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addql #1,%d0&lt;/P&gt;&lt;P&gt;&amp;nbsp; 2c:&amp;nbsp;&amp;nbsp;&amp;nbsp; 4e5e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unlk %fp&lt;/P&gt;&lt;P&gt;&amp;nbsp; 2e:&amp;nbsp;&amp;nbsp;&amp;nbsp; 4e75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rts&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Netburner MacOS tools version string:&lt;/P&gt;&lt;P&gt;$ m68k-elf-gcc --version&lt;/P&gt;&lt;P&gt;m68k-elf-gcc (GCC) 4.2.1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The GCC option in the Codewarrior IDE is only for ARM targets.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Shaun&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Mar 2015 23:51:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300235#M12089</guid>
      <dc:creator>yibbidy</dc:creator>
      <dc:date>2015-03-30T23:51:04Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300236#M12090</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Shaun James wrote:&lt;/P&gt;&lt;P&gt;&amp;gt; Using the Codewarrior 10.2 for Linux which uses the Metrowerks compiler,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you very much for running these tests. There are three interesting results.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Firstly it looks like this "misfeature" wasn't in gcc 4.2.1 (July 2007), but was added before 4.3.3 (Jan 2009) and is still there in 4.7.2 (Sep 2012).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Secondly, Metrowerks doesn't do this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thirdly, in your tests Metrowerks is generating 2.5 times as much code as gcc does - 114 bytes versus 46 bytes. Are you sure the optimisation was set properly and there wasn't something else (like debugging) enabled to make it generate code like that?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 31 Mar 2015 01:13:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300236#M12090</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2015-03-31T01:13:29Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300237#M12091</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think you are right, there must be some compiler option switch somewhere in the CW GUI that I am not finding.&amp;nbsp; Here is the output from Codewarrior when the project is initially created with the "wizard" to have full optimisation:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;_bitcount:&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x00000000&amp;nbsp; 0x4E560000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;link&lt;/TD&gt;&lt;TD&gt;a6,#0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000004&amp;nbsp; 0x7200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;moveq&lt;/TD&gt;&lt;TD&gt;#0,d1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000006&amp;nbsp; 0x08000000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;btst&lt;/TD&gt;&lt;TD&gt;#0,d0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x0000000A&amp;nbsp; 0x6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;beq.s&lt;/TD&gt;&lt;TD&gt;*+4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;; 0x0000000e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x0000000C&amp;nbsp; 0x7201&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;moveq&lt;/TD&gt;&lt;TD&gt;#1,d1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x0000000E&amp;nbsp; 0x08000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;btst&lt;/TD&gt;&lt;TD&gt;#1,d0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x00000012&amp;nbsp; 0x6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;beq.s&lt;/TD&gt;&lt;TD&gt;*+4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;; 0x00000016&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000014&amp;nbsp; 0x5281&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;addq.l&amp;nbsp;&amp;nbsp; #1,d1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000016&amp;nbsp; 0x08000002&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;btst&lt;/TD&gt;&lt;TD&gt;#2,d0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x0000001A&amp;nbsp; 0x6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;beq.s&lt;/TD&gt;&lt;TD&gt;*+4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;; 0x0000001e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x0000001C&amp;nbsp; 0x5281&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;addq.l&amp;nbsp;&amp;nbsp; #1,d1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x0000001E&amp;nbsp; 0x08000003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;btst&lt;/TD&gt;&lt;TD&gt;#3,d0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x00000022&amp;nbsp; 0x6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;beq.s&lt;/TD&gt;&lt;TD&gt;*+4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;; 0x00000026&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000024&amp;nbsp; 0x5281&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;addq.l&amp;nbsp;&amp;nbsp; #1,d1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000026&amp;nbsp; 0x08000004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;btst&lt;/TD&gt;&lt;TD&gt;#4,d0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x0000002A&amp;nbsp; 0x6702&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;beq.s&lt;/TD&gt;&lt;TD&gt;*+4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;; 0x0000002e&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x0000002C&amp;nbsp; 0x5281&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;addq.l&amp;nbsp;&amp;nbsp; #1,d1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x0000002E&amp;nbsp; 0x2001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;move.l&amp;nbsp;&amp;nbsp; d1,d0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;0x00000030&amp;nbsp; 0x4E5E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;unlk&lt;/TD&gt;&lt;TD&gt;a6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0x00000032&amp;nbsp; 0x4E75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;rts&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can see from the above three Codewarrior tests in the previous post that the code gets smaller by a few bytes for each increase in optimisation level, so changing the optimisation setting is definitely doing "something".&amp;nbsp; The project for them was initially defined to have no optimisation then I increased it later.&amp;nbsp; I've always started projects that way, then increased the optimisation later.&amp;nbsp; It seems I've released quite a bit of bloated code :smileysad:.&amp;nbsp;&amp;nbsp; Anyway, nice to see that CW is not generating code 2.5 times larger than GCC.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 31 Mar 2015 04:32:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300237#M12091</guid>
      <dc:creator>yibbidy</dc:creator>
      <dc:date>2015-03-31T04:32:28Z</dc:date>
    </item>
    <item>
      <title>Re: Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300238#M12092</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;SPAN style="color: #ff6600; font-size: 12pt;"&gt;&lt;STRONG&gt;I'd be interested in seeing the assembly output or disassembly of the following code using "your favourite compiler":&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;int bitcount(int bits)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int nRes = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="min-height: 8pt; height: 8pt; padding: 0px; padding-left: 30px;"&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x01) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x02) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x04) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x08) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (bits &amp;amp; 0x10) nRes++;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return nRes;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="padding-left: 30px;"&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="min-height: 8pt; height: 8pt; padding: 0px;"&gt;&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;Using vbcc I get:&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code _jivemacro_uid_14277774441192418" jivemacro_uid="_14277774441192418"&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;_bitcount:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; subq.l #4,sp&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; movem.l d2,(sp)&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; move.l (8,sp),d2&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #0,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #1,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_3e8&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_3e8:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_3f0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_3f0:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #4,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_3f8&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_3f8:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #8,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_400&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_400:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; moveq #$10,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; and.l d2,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; beq.b lab_408&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #1,d1&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;lab_408:&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; move.l d1,d0&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; movem.l (sp),d2&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; addq.l #4,sp&lt;/P&gt;
&lt;P class="jive_text_macro jive_macro_quote"&gt;&amp;nbsp;&amp;nbsp; rts&lt;/P&gt;


&lt;/PRE&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;I count 62 bytes so it did ok in size and avoids writing to the CCR. Performance would be better on a superscalar CPU like the 68060 or CF v5 with early instruction completion and forwarding of MOVEQ.&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;&lt;/P&gt;&lt;P class="jive_text_macro jive_macro_quote"&gt;A couple of notes about vbcc:&lt;/P&gt;&lt;P&gt;It uses the stack instead of a stack frame by default as it generates better code (especially on the 68k with a MOVEM supporting pre-decrement and post-increment).&lt;/P&gt;&lt;P&gt;Vbcc has the best 68k (and maybe ColdFire) peephole optimizing assembler ever in vasm.&lt;/P&gt;&lt;P&gt;The vclib link library and inlines for vbcc are written by 68k enthusiasts and are becoming more optimized. Send in your optimized CF code to have it included.&lt;/P&gt;&lt;P&gt;The 68k/ColdFire backend is too simple and needs improvement but bugs are fixed. There is no instruction scheduler yet.&lt;/P&gt;&lt;P&gt;The original idea of vbcc was to let the peephole optimizing assembler optimize instructions like MOVEM-&amp;gt;MOVE above but it can't for a data register because of the CC flags.&lt;/P&gt;&lt;P&gt;The source code for vbcc, vasm and vlink are online and there are few dependencies. I compile them with themselves on my 68060 Amiga.&lt;/P&gt;&lt;P&gt;I was able to compile with -cpu=5329 to generate CF code into my Amiga Hunk format executable as the backend for 68k and ColdFire is shared.&lt;/P&gt;&lt;P&gt;Vbcc was originally targeted at embedded but has become popular for retro computers and processors also. C99 support is pretty good and improving.&lt;/P&gt;&lt;P&gt;The Atari (ColdFire) Firebee is supported and an Amiga FPGA 68k processor should be mostly ColdFire compatible and at least partially supported.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 31 Mar 2015 04:48:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300238#M12092</guid>
      <dc:creator>matthey</dc:creator>
      <dc:date>2015-03-31T04:48:18Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300239#M12093</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for providing that example. Gcc is being a little "too smart" here.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The most amazing piece of code I've seen an older version of gcc generate was a "multiply by three" in ONE instruction WITHOUT using the "MUL" or (the more usual) shift and add sequences "MUL" took 70 clocks on the 68000 and 41 clocks on a 68020. Shifts and adds took a minimum of 3 instructions and needed another register. Instead it generated an "lea (a1,a1.l*2),a1" instruction!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;gt; I count 62 bytes so it did ok in size and avoids writing to the CCR.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If gcc uses the proper "btst" throughout the function would be 46 bytes. That's 74% of what vbcc managed. Vbcc also takes 4 16-bit instructions instead of three (two 16-bit, one 32-bit) which would be faster on most CPUs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I've just noticed that this corruption of the MCF53xx branch prediction is bad, but not as bad as it could be. It "only" reverses the prediction of Forward branches. The prediction of backward branches is unchanged. Still, that would slow down a lot of code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 05 Apr 2015 14:16:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300239#M12093</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2015-04-05T14:16:53Z</dc:date>
    </item>
    <item>
      <title>Re: GCC Clobbering Branch Predict Bit in CF3 Cores</title>
      <link>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300240#M12094</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm profiling some code to see why the serial port transmit interrupt routine is taking so much longer than it should. I was able to get it 30% faster by getting rid of a common interrupt routine that was being called with "interface indices" by the service routines for UARTS 0, 1 and 2 because the code was spending way too much time indexing various arrays. Then the profiling showed the CPU was spending 8 times longer one one instruction than I expected it should. The specific instruction is "movew %d1, %ccr". So why is that (seemingly) taking so much longer?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Gcc is doing that to replace a two-word "btst" instruction with a one-word instruction. That might be a bit faster on a 68000 [1], but on a ColdFire, the immediate "btst" instruction takes ONE clock, so can't be replaced by anything faster.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The replacement "&lt;SPAN style="; color: #ff0000; font-family: courier new,courier;"&gt;&lt;STRONG&gt;movew %d1,%ccr&lt;/STRONG&gt;&lt;/SPAN&gt;" instruction takes (now reading the Reference Manuals properly...) ONE clock on MCF51, MCF52, MCF53 and MCF54. So no difference (except being two bytes shorter and corrupting Branch Predict on MCF53).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note 1: And how about the older chips? Surely this "trick" was written when going from 4 bytes to 2 bytes (for the instruction change) meant something?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;68000 and 68010 took 10 clocks for BTST and 12 clocks for the CCR replacement. So the replacement would be slower.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;68EC020 takes one clock for BTST and 4 clocks for the CCR replacement. Slower again.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So why do my measurement show it taking 8 times longer on that instruction? That's probably something weird in the profiling.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 24 Apr 2017 07:54:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/ColdFire-68K-Microcontrollers/GCC-Clobbering-Branch-Predict-Bit-in-CF3-Cores/m-p/300240#M12094</guid>
      <dc:creator>TomE</dc:creator>
      <dc:date>2017-04-24T07:54:01Z</dc:date>
    </item>
  </channel>
</rss>

