<html><body><div style="color:#000; background-color:#fff; font-family:times new roman, new york, times, serif;font-size:12pt"><div><span>WOW, very very interesting results ...</span></div><div><span>Thanks.</span></div><div><span><br></span></div><div><span>BogDan.</span></div><div><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div style="font-size: 12pt; font-family: 'times new roman', 'new york', times, serif; "><div style="font-size: 12pt; font-family: 'times new roman', 'new york', times, serif; "><font size="2" face="Arial"><hr size="1"><b><span style="font-weight:bold;">From:</span></b> "thomas.senyk@nokia.com" &lt;thomas.senyk@nokia.com&gt;<br><b><span style="font-weight: bold;">To:</span></b> bog_dan_ro@yahoo.com; necessitas-devel@kde.org<br><b><span style="font-weight: bold;">Sent:</span></b> Thursday, July 14, 2011 6:30 PM<br><b><span style="font-weight: bold;">Subject:</span></b> RE:
 atomics<br></font><br>There you go<br><br>Not sure what will happen with the names of the files, so:<br>...galax~1.log is: galaxy tab10" <br>...galax~2.log is: galaxy s2<br><br>________________________________________<br>From: ext BogDan [<a ymailto="mailto:bog_dan_ro@yahoo.com" href="mailto:bog_dan_ro@yahoo.com">bog_dan_ro@yahoo.com</a>]<br>Sent: Thursday, July 14, 2011 3:53 PM<br>To: BogDan; Senyk Thomas (Nokia-DXM/Munich); <a ymailto="mailto:necessitas-devel@kde.org" href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</a><br>Subject: Re: atomics<br><br>One more thing, "int atomic_xxxxxx" must NOT be inline functions because it will break the ABI !<br><br>BogDan.<br><br><br><br>&gt;________________________________<br>&gt;From: BogDan &lt;<a ymailto="mailto:bog_dan_ro@yahoo.com" href="mailto:bog_dan_ro@yahoo.com">bog_dan_ro@yahoo.com</a>&gt;<br>&gt;To: "<a ymailto="mailto:thomas.senyk@nokia.com"
 href="mailto:thomas.senyk@nokia.com">thomas.senyk@nokia.com</a>" &lt;<a ymailto="mailto:thomas.senyk@nokia.com" href="mailto:thomas.senyk@nokia.com">thomas.senyk@nokia.com</a>&gt;; "<a ymailto="mailto:necessitas-devel@kde.org" href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</a>" &lt;<a ymailto="mailto:necessitas-devel@kde.org" href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</a>&gt;<br>&gt;Sent: Thursday, July 14, 2011 4:46 PM<br>&gt;Subject: Re: atomics<br>&gt;<br>&gt;<br>&gt;Sorry :)<br>&gt;Attached !<br>&gt;<br>&gt;<br>&gt;BogDan.<br>&gt;<br>&gt;<br>&gt;<br>&gt;&gt;________________________________<br>&gt;&gt;From: "<a ymailto="mailto:thomas.senyk@nokia.com" href="mailto:thomas.senyk@nokia.com">thomas.senyk@nokia.com</a>" &lt;<a ymailto="mailto:thomas.senyk@nokia.com" href="mailto:thomas.senyk@nokia.com">thomas.senyk@nokia.com</a>&gt;<br>&gt;&gt;To: <a ymailto="mailto:bog_dan_ro@yahoo.com"
 href="mailto:bog_dan_ro@yahoo.com">bog_dan_ro@yahoo.com</a>; <a ymailto="mailto:necessitas-devel@kde.org" href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</a><br>&gt;&gt;Sent: Thursday, July 14, 2011 4:38 PM<br>&gt;&gt;Subject: RE: atomics<br>&gt;&gt;<br>&gt;&gt;The whitespaces and everything seams to be quite broken in<br>your code-past :)<br>&gt;&gt;<br>&gt;&gt;Could you create a projects, tar it and send it as attachment? This would help a lot and more people will be willing to run it :)<br>&gt;&gt;<br>&gt;&gt;Greets<br>&gt;&gt;Thomas<br>&gt;&gt;________________________________________<br>&gt;&gt;From: ext BogDan [<a ymailto="mailto:bog_dan_ro@yahoo.com" href="mailto:bog_dan_ro@yahoo.com">bog_dan_ro@yahoo.com</a>]<br>&gt;&gt;Sent: Friday, July 08, 2011 3:33 PM<br>&gt;&gt;To: <a ymailto="mailto:necessitas-devel@kde.org" href="mailto:necessitas-devel@kde.org">necessitas-devel@kde.org</a><br>&gt;&gt;Subject:
 atomics<br>&gt;&gt;<br>&gt;&gt;Hello Folks,<br>&gt;&gt;<br>&gt;&gt;I've made a small application to test current available atomic implementations on android.<br>&gt;&gt;This are the results on a HTC sensation device:<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;Test 1<br>&gt;&gt;===============================<br>&gt;&gt;USING SMP safe ASM instructions<br>&gt;&gt;--------------------------------------------------------------------<br>&gt;&gt;Executing test_atomic_cmpxchg_ASM took 14714<br>&gt;&gt;Executing test_atomic_cmpxchg_GCC took 15685<br>&gt;&gt;Executing<br>test_atomic_cmpxchg_Android took 8874<br>&gt;&gt;Executing test_atomic_inc_ASM took 14310<br>&gt;&gt;Executing test_atomic_inc_GCC took 16190<br>&gt;&gt;Executing test_atomic_inc_Android took 8351<br>&gt;&gt;===============================<br>&gt;&gt;Test 2<br>&gt;&gt;===============================<br>&gt;&gt;USING SMP unsafe ASM
 instructions<br>&gt;&gt;--------------------------------------------------------------------<br>&gt;&gt;Executing test_atomic_cmpxchg_ASM took 6904<br>&gt;&gt;Executing test_atomic_cmpxchg_GCC took 15814<br>&gt;&gt;Executing test_atomic_cmpxchg_Android took 8864<br>&gt;&gt;Executing test_atomic_inc_ASM took 6404<br>&gt;&gt;Executing test_atomic_inc_GCC took 16048<br>&gt;&gt;Executing test_atomic_inc_Android took 8198<br>&gt;&gt;===============================<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;And this is
 the<br>code:<br>&gt;&gt;<br>&gt;&gt;#include&lt;QDebug&gt;<br>&gt;&gt;#include&lt;QDateTime&gt;<br>&gt;&gt;#include&lt;sys/atomics.h&gt;<br>&gt;&gt;staticconstintLOOPS=100000000;<br>&gt;&gt;#defineSMP_SAFE<br>&gt;&gt;#ifdefSMP_SAFE<br>&gt;&gt;#definesmp_mb__asm____volatile__("dmb":::"memory")<br>&gt;&gt;#else<br>&gt;&gt;#definesmp_mb<br>&gt;&gt;#endif<br>&gt;&gt;intatomic_cmpxchg(int&amp;_q_value,intexpectedValue,intnewValue)<br>&gt;&gt;{<br>&gt;&gt;registerintresult;<br>&gt;&gt;smp_mb;<br>&gt;&gt;asmvolatile("0:\n"<br>&gt;&gt;"ldrex%[result],[%[_q_value]]\n"<br>&gt;&gt;"eors%[result],%[result],%[expectedValue]\n"<br>&gt;&gt;"itteq\n"<br>&gt;&gt;"strexeq%[result],%[newValue],[%[_q_value]]\n"<br>&gt;&gt;"teqeq%[result],#1\n"<br>&gt;&gt;"beq0b\n"<br>&gt;&gt;:[result]"=&amp;r"(result),<br>&gt;&gt;"+m"(_q_value)<br>&gt;&gt;:[expectedValue]"r"(expectedValue),<br>&gt;&gt;[newValue]"r"(newValue),<br>&gt;&gt;[_q_value]"r"(&amp;_q_value)<br>&gt;&gt;:"cc");<br>&
gt;&gt;smp_mb;<br>&gt;&gt;returnresult==0;<br>&gt;&gt;}<br>&gt;&gt;voidtest_atomic_cmpxchg_ASM()<br>&gt;&gt;{<br>&gt;&gt;inttest=0;<br>&gt;&gt;for(inti=0;i&lt;LOOPS;i++)<br>&gt;&gt;{<br>&gt;&gt;atomic_cmpxchg(test,test,test+1);<br>&gt;&gt;}<br>&gt;&gt;qDebug()&lt;&lt;test;<br>&gt;&gt;}<br>&gt;&gt;voidtest_atomic_cmpxchg_GCC()<br>&gt;&gt;{<br>&gt;&gt;inttest=0;<br>&gt;&gt;for(inti=0;i&lt;LOOPS;i++)<br>&gt;&gt;{<br>&gt;&gt;__sync_bool_compare_and_swap(&amp;test,test,test+1);<br>&gt;&gt;}<br>&gt;&gt;qDebug()&lt;&lt;test;<br>&gt;&gt;}<br>&gt;&gt;voidtest_atomic_cmpxchg_Android()<br>&gt;&gt;{<br>&gt;&gt;inttest=0;<br>&gt;&gt;for(inti=0;i&lt;LOOPS;i++)<br>&gt;&gt;{<br>&gt;&gt;__atomic_cmpxchg(test,test+1,&amp;test);<br>&gt;&gt;}<br>&gt;&gt;qDebug()&lt;&lt;test;<br>&gt;&gt;}<br>&gt;&gt;intatomic_inc(int&amp;_q_value,intvalueToAdd)<br>&gt;&gt;{<br>&gt;&gt;registerintoriginalValue;<br>&gt;&gt;registerintnewValue;<br>&gt;&gt;registerintresult;<br>&gt;&gt;smp_mb;<
br>&gt;&gt;asmvolatile("0:\n"<br>&gt;&gt;"ldrex%[originalValue],[%[_q_value]]\n"<br>&gt;&gt;"add%[newValue],%[originalValue],%[valueToAdd]\n"<br>&gt;&gt;"strex%[result],%[newValue],[%[_q_value]]\n"<br>&gt;&gt;"teq%[result],#0\n"<br>&gt;&gt;"bne0b\n"<br>&gt;&gt;:[originalValue]"=&amp;r"(originalValue),<br>&gt;&gt;[newValue]"=&amp;r"(newValue),<br>&gt;&gt;[result]"=&amp;r"(result),<br>&gt;&gt;"+m"(_q_value)<br>&gt;&gt;:[valueToAdd]"r"(valueToAdd),<br>&gt;&gt;[_q_value]"r"(&amp;_q_value)<br>&gt;&gt;:"cc");<br>&gt;&gt;smp_mb;<br>&gt;&gt;returnoriginalValue;<br>&gt;&gt;}<br>&gt;&gt;voidtest_atomic_inc_ASM()<br>&gt;&gt;{<br>&gt;&gt;inttest=0;<br>&gt;&gt;intlast=0;<br>&gt;&gt;for(inti=<br>0;i&lt;LOOPS;i++)<br>&gt;&gt;{<br>&gt;&gt;last=atomic_inc(test,1);<br>&gt;&gt;}<br>&gt;&gt;qDebug()&lt;&lt;test&lt;&lt;last;<br>&gt;&gt;}<br>&gt;&gt;voidtest_atomic_inc_GCC()<br>&gt;&gt;{<br>&gt;&gt;inttest=0;<br>&gt;&gt;intlast=0;<br>&gt;&gt;for(inti=0;i&lt;LOOPS;i++)<br>&gt
;&gt;{<br>&gt;&gt;last=__sync_fetch_and_add(&amp;test,1);<br>&gt;&gt;}<br>&gt;&gt;qDebug()&lt;&lt;test&lt;&lt;last;<br>&gt;&gt;}<br>&gt;&gt;voidtest_atomic_inc_Android()<br>&gt;&gt;{<br>&gt;&gt;inttest=0;<br>&gt;&gt;intlast=0;<br>&gt;&gt;for(inti=0;i&lt;LOOPS;i++)<br>&gt;&gt;{<br>&gt;&gt;last=__atomic_inc(&amp;test);<br>&gt;&gt;}<br>&gt;&gt;qDebug()&lt;&lt;test&lt;&lt;last;<br>&gt;&gt;}<br>&gt;&gt;voidtestAtomics()<br>&gt;&gt;{<br>&gt;&gt;#ifdefSMP_SAFE<br>&gt;&gt;qDebug()&lt;&lt;"USINGSMPsafeASMinstructions";<br>&gt;&gt;#else<br>&gt;&gt;qDebug()&lt;&lt;"USINGSMPunsafeASMinstructions";<br>&gt;&gt;#endif<br>&gt;&gt;QDateTimestart=QDateTime::currentDateTimeUtc();<br>&gt;&gt;test_atomic_cmpxchg_ASM();<br>&gt;&gt;qDebug()&lt;&lt;"Executingtest_atomic_cmpxchg_ASMtook"&lt;&lt;start.msecsTo(QDateTime::currentDateTimeUtc());<br>&gt;&gt;start=QDateTime::currentDateTimeUtc();<br>&gt;&gt;test_atomic_cmpxchg_GCC();<br>&gt;&gt;qDebug()&lt;&lt;"Executingtest_atomic_c
mpxchg_GCCtook"&lt;&lt;start<br>.msecsTo(QDateTime::currentDateTimeUtc());<br>&gt;&gt;start=QDateTime::currentDateTimeUtc();<br>&gt;&gt;test_atomic_cmpxchg_Android();<br>&gt;&gt;qDebug()&lt;&lt;"Executingtest_atomic_cmpxchg_Androidtook"&lt;&lt;start.msecsTo(QDateTime::currentDateTimeUtc());<br>&gt;&gt;start=QDateTime::currentDateTimeUtc();<br>&gt;&gt;test_atomic_inc_ASM();<br>&gt;&gt;qDebug()&lt;&lt;"Executingtest_atomic_inc_ASMtook"&lt;&lt;start.msecsTo(QDateTime::currentDateTimeUtc());<br>&gt;&gt;start=QDateTime::currentDateTimeUtc();<br>&gt;&gt;test_atomic_inc_GCC();<br>&gt;&gt;qDebug()&lt;&lt;"Executingtest_atomic_inc_GCCtook"&lt;&lt;start.msecsTo(QDateTime::currentDateTimeUtc());<br>&gt;&gt;start=QDateTime::currentDateTimeUtc();<br>&gt;&gt;test_atomic_inc_Android();<br>&gt;&gt;qDebug()&lt;&lt;"Executingtest_atomic_inc_Androidtook"&lt;&lt;start.msecsTo(QDateTime::currentDateTimeUtc());<br>&gt;&gt;}<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;Please try this
 code on a different devices and post the results here.<br>&gt;&gt;<br>&gt;&gt;Thanks,<br>&gt;&gt;BogDan.<br>&gt;&gt;_______________________________________________<br>&gt;&gt;Necessitas-devel mailing<br>list<br>&gt;&gt;<a ymailto="mailto:Necessitas-devel@kde.org" href="mailto:Necessitas-devel@kde.org">Necessitas-devel@kde.org</a><br>&gt;&gt;<a href="https://mail.kde.org/mailman/listinfo/necessitas-devel" target="_blank">https://mail.kde.org/mailman/listinfo/necessitas-devel</a><br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt;<br>&gt;_______________________________________________<br>&gt;Necessitas-devel mailing list<br>&gt;<a ymailto="mailto:Necessitas-devel@kde.org" href="mailto:Necessitas-devel@kde.org">Necessitas-devel@kde.org</a><br>&gt;<a href="https://mail.kde.org/mailman/listinfo/necessitas-devel" target="_blank">https://mail.kde.org/mailman/listinfo/necessitas-devel</a><br>&gt;<br>&gt;<br>&gt;<br><br><br></div></div></blockquote></div></div></body></html>