12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office"><head>
-
- <title>CMSIS: Cortex-M4 SIMD Instructions</title><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
- <meta name="ProgId" content="FrontPage.Editor.Document">
- <style>
- <!--
- /*-----------------------------------------------------------Keil Software CHM Style Sheet
- -----------------------------------------------------------*/
- body { color: #000000; background-color: #FFFFFF; font-size: 75%; font-family: Verdana, Arial, 'Sans Serif' }
- a:link { color: #0000FF; text-decoration: underline }
- a:visited { color: #0000FF; text-decoration: underline }
- a:active { color: #FF0000; text-decoration: underline }
- a:hover { color: #FF0000; text-decoration: underline }
- h1 { font-family: Verdana; font-size: 18pt; color: #000080; font-weight: bold; text-align: Center; margin-right: 3 }
- h2 { font-family: Verdana; font-size: 14pt; color: #000080; font-weight: bold; background-color: #CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
- h3 { font-family: Verdana; font-size: 10pt; font-weight: bold; background-color: #CCCCCC; margin-top: 24; margin-bottom: 3; padding: 6 }
- pre { font-family: Courier New; font-size: 10pt; background-color: #CCFFCC; margin-left: 24; margin-right: 24 }
- ul { list-style-type: square; margin-top: 6pt; margin-bottom: 0 }
- ol { margin-top: 6pt; margin-bottom: 0 }
- li { clear: both; margin-bottom: 6pt }
- table { font-size: 100%; border-width: 0; padding: 0 }
- th { color: #FFFFFF; background-color: #000080; text-align: left; vertical-align: bottom; padding-right: 6pt }
- tr { text-align: left; vertical-align: top }
- td { text-align: left; vertical-align: top; padding-right: 6pt }
- .ToolT { font-size: 8pt; color: #808080 }
- .TinyT { font-size: 8pt; text-align: Center }
- code { color: #000000; background-color: #E0E0E0; font-family: 'Courier New', Courier; line-height: 120%; font-style: normal }
- /*-----------------------------------------------------------Notes
- -----------------------------------------------------------*/
- p.note { font-weight: bold; clear: both; margin-bottom: 3pt; padding-top: 6pt }
- /*-----------------------------------------------------------Expanding/Contracting Divisions
- -----------------------------------------------------------*/
- #expand { text-decoration: none; margin-bottom: 3pt }
- img.expand { border-style: none; border-width: medium }
- div.expand { display: none; margin-left: 9pt; margin-top: 0 }
- /*-----------------------------------------------------------Where List Tags
- -----------------------------------------------------------*/
- p.wh { font-weight: bold; clear: both; margin-top: 6pt; margin-bottom: 3pt }
- table.wh { width: 100% }
- td.whItem { white-space: nowrap; font-style: italic; padding-right: 6pt; padding-bottom: 6pt }
- td.whDesc { padding-bottom: 6pt }
- /*-----------------------------------------------------------Keil Table Tags
- -----------------------------------------------------------*/
- table.kt { width: 100%; border: 1pt solid #000000 }
- th.kt { white-space: nowrap; border-bottom: 1pt solid #000000; padding-left: 6pt; padding-right: 6pt; padding-top: 4pt; padding-bottom: 4pt }
- tr.kt { }
- td.kt { color: #000000; background-color: #E0E0E0; border-top: 1pt solid #A0A0A0; padding-left: 6pt; padding-right: 6pt; padding-top: 2pt; padding-bottom: 2pt }
- /*----------------------------------------------------------------------------------------------------------------------*/
- .style1 {
- background-color: #E0E0E0;
- }
- .O
- {color:#1D315B;
- font-size:149%;}
- -->
- </style>
- </head>
- <body>
- <h1>CMSIS Support for Cortex-M4 SIMD Instructions</h1>
- <p align="center">This file describes the Cortex-M4 SIMD instructions supported by CMSIS.</p>
- <p align="center">Version: 1.00 - 25. November 2010</p>
- <p class="TinyT">Information in this file, the accompany manuals, and software is<br>
- Copyright © ARM Ltd.<br>All rights reserved.
- </p>
- <hr>
- <h2>Revision History</h2>
- <ul>
- <li>Revision 0.01 - January 2010: Initial version</li>
- <li>Revision 0.02 - June 2010: added __QADD, __QSUB</li>
- <li>Revision 1.00 - November 2010: </li>
- </ul>
- <hr>
- <h2>Contents</h2>
- <ol>
- <li class="LI2"><a href="#About">About</a></li>
- <li class="LI2"><a href="#CM4-SIMD-Instructions">Cortex-M4 SIMD instruction support</a></li>
- <li class="LI2"><a href="#Examples">Examples</a></li>
- </ol>
- <p> </p>
- <h2><a name="About"></a>About</h2>
- <p>
- CMSIS provides for the Cortex-M4 a set of functions supporting Cortex-M4 SIMD instructions.
- </p>
- <p> </p>
- <h2><a name="CM4-SIMD-Instructions"></a>Cortex-M4 SIMD instruction support</h2>
- <p>CMSIS supports the following functions for Cortex-M4 instructions:
- </p>
- <table class="kt" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <th class="kt">Name</th>
- <th class="kt">Mnemonic</th>
- <th class="kt">Description</th>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SADD8">__SADD8</a></b></td>
- <td class="kt">SADD8</td>
- <td class="kt">GE setting quad 8-bit signed addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QADD8">__QADD8</a></b></td>
- <td class="kt">QADD8</td>
- <td class="kt">Q setting quad 8-bit saturating addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SHADD8">__SHADD8</a></b></td>
- <td class="kt">SHADD8</td>
- <td class="kt">Quad 8-bit signed addition with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UADD8">__UADD8</a></b></td>
- <td class="kt">UADD8</td>
- <td class="kt">GE setting quad 8-bit unsigned addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UQADD8">__UQADD8</a></b></td>
- <td class="kt">UQADD8</td>
- <td class="kt">Quad 8-bit unsigned saturating addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UHADD8">__UHADD8</a></b></td>
- <td class="kt">UHADD8</td>
- <td class="kt">Quad 8-bit unsigned addition with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SSUB8">__SSUB8</a></b></td>
- <td class="kt">SSUB8</td>
- <td class="kt">GE setting quad 8-bit signed subtraction</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QSUB8">__QSUB8</a></b></td>
- <td class="kt">QSUB8</td>
- <td class="kt">Q setting quad 8-bit saturating subtract</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SHSUB8">__SHSUB8</a></b></td>
- <td class="kt">SHSUB8</td>
- <td class="kt">Quad 8-bit signed subtraction with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__USUB8">__USUB8</a></b></td>
- <td class="kt">USUB8</td>
- <td class="kt">GE setting quad 8-bit unsigned subtract</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UQSUB8">__UQSUB8</a></b></td>
- <td class="kt">UQSUB8</td>
- <td class="kt">Quad 8-bit unsigned saturating subtraction</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UHSUB8">__UHSUB8</a></b></td>
- <td class="kt">UHSUB8</td>
- <td class="kt">Quad 8-bit unsigned subtraction with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SADD16">__SADD16</a></b></td>
- <td class="kt">SADD16</td>
- <td class="kt">GE setting dual 16-bit signed addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QADD16">__QADD16</a></b></td>
- <td class="kt">QADD16</td>
- <td class="kt">Q setting dual 16-bit saturating addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SHADD16">__SHADD16</a></b></td>
- <td class="kt">SHADD16</td>
- <td class="kt">Dual 16-bit signed addition with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UADD16">__UADD16</a></b></td>
- <td class="kt">UADD16</td>
- <td class="kt">GE setting dual 16-bit unsigned addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UQADD16">__UQADD16</a></b></td>
- <td class="kt">UQADD16</td>
- <td class="kt">Dual 16-bit unsigned saturating addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UHADD16">__UHADD16</a></b></td>
- <td class="kt">UHADD16</td>
- <td class="kt">Dual 16-bit unsigned addition with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SSUB16">__SSUB16</a></b></td>
- <td class="kt">SSUB16</td>
- <td class="kt">GE setting dual 16-bit signed subtraction</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QSUB16">__QSUB16</a></b></td>
- <td class="kt">QSUB16</td>
- <td class="kt">Q setting dual 16-bit saturating subtract</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SHSUB16">__SHSUB16</a></b></td>
- <td class="kt">SHSUB16</td>
- <td class="kt">Dual 16-bit signed subtraction with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__USUB16">__USUB16</a></b></td>
- <td class="kt">USUB16</td>
- <td class="kt">GE setting dual 16-bit unsigned subtract</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UQSUB16">__UQSUB16</a></b></td>
- <td class="kt">UQSUB16</td>
- <td class="kt">Dual 16-bit unsigned saturating subtraction</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UHSUB16">__UHSUB16</a></b></td>
- <td class="kt">UHSUB16</td>
- <td class="kt">Dual 16-bit unsigned subtraction with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SASX">__SASX</a></b></td>
- <td class="kt">SASX</td>
- <td class="kt">GE setting dual 16-bit addition and subtraction with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QASX">__QASX</a></b></td>
- <td class="kt">QASX</td>
- <td class="kt">Q setting dual 16-bit add and subtract with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SHASX">__SHASX</a></b></td>
- <td class="kt">SHASX</td>
- <td class="kt">Dual 16-bit signed addition and subtraction with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UASX">__UASX</a></b></td>
- <td class="kt">UASX</td>
- <td class="kt">GE setting dual 16-bit unsigned addition and subtraction with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UQASX">__UQASX</a></b></td>
- <td class="kt">UQASX</td>
- <td class="kt">Dual 16-bit unsigned saturating addition and subtraction with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UHASX">__UHASX</a></b></td>
- <td class="kt">UHASX</td>
- <td class="kt">Dual 16-bit unsigned addition and subtraction with halved results and exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SSAX">__SSAX</a></b></td>
- <td class="kt">SSAX</td>
- <td class="kt">GE setting dual 16-bit signed subtraction and addition with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QSAX">__QSAX</a></b></td>
- <td class="kt">QSAX</td>
- <td class="kt">Q setting dual 16-bit subtract and add with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SHSAX">__SHSAX</a></b></td>
- <td class="kt">SHSAX</td>
- <td class="kt">Dual 16-bit signed subtraction and addition with halved results</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__USAX">__USAX</a></b></td>
- <td class="kt">USAX</td>
- <td class="kt">GE setting dual 16-bit unsigned subtract and add with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UQSAX">__UQSAX</a></b></td>
- <td class="kt">UQSAX</td>
- <td class="kt">Dual 16-bit unsigned saturating subtraction and addition with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UHSAX">__UHSAX</a></b></td>
- <td class="kt">UHSAX</td>
- <td class="kt">Dual 16-bit unsigned subtraction and addition with halved results and exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__USAD8">__USAD8</a></b></td>
- <td class="kt">USAD8</td>
- <td class="kt">Unsigned sum of quad 8-bit unsigned absolute difference</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__USADA8">__USADA8</a></b></td>
- <td class="kt">USADA8</td>
- <td class="kt">Unsigned sum of quad 8-bit unsigned absolute difference with 32-bit accumulate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SSAT16">__SSAT16</a></b></td>
- <td class="kt">SSAT16</td>
- <td class="kt">Q setting dual 16-bit saturate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__USAT16">__USAT16</a></b></td>
- <td class="kt">USAT16</td>
- <td class="kt">Q setting dual 16-bit unsigned saturate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UXTB16">__UXTB16</a></b></td>
- <td class="kt">UXTB16</td>
- <td class="kt">Dual extract 8-bits and zero-extend to 16-bits</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__UXTAB16">__UXTAB16</a></b></td>
- <td class="kt">UXTAB16</td>
- <td class="kt">Extracted 16-bit to 32-bit unsigned addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SXTB16">__SXTB16</a></b></td>
- <td class="kt">SXTB16</td>
- <td class="kt">Dual extract 8-bits and sign extend each to 16-bits</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SXTAB16">__SXTAB16</a></b></td>
- <td class="kt">SXTAB16</td>
- <td class="kt">Dual extracted 8-bit to 16-bit signed addition</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMUAD">__SMUAD</a></b></td>
- <td class="kt">SMUAD</td>
- <td class="kt">Q setting sum of dual 16-bit signed multiply</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMUADX">__SMUADX</a></b></td>
- <td class="kt">SMUADX</td>
- <td class="kt">Q setting sum of dual 16-bit signed multiply with exchange</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLAD">__SMLAD</a></b></td>
- <td class="kt">SMLAD</td>
- <td class="kt">Q setting dual 16-bit signed multiply with single 32-bit accumulator</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLADX">__SMLADX</a></b></td>
- <td class="kt">SMLADX</td>
- <td class="kt">Q setting pre-exchanged dual 16-bit signed multiply with single 32-bit accumulator</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLALD">__SMLALD</a></b></td>
- <td class="kt">SMLALD</td>
- <td class="kt">Dual 16-bit signed multiply with single 64-bit accumulator</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLALDX">__SMLALDX</a></b></td>
- <td class="kt">SMLALDX</td>
- <td class="kt">Dual 16-bit signed multiply with exchange with single 64-bit accumulator</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMUSD">__SMUSD</a></b></td>
- <td class="kt">SMUSD</td>
- <td class="kt">Dual 16-bit signed multiply returning difference</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMUSDX">__SMUSDX</a></b></td>
- <td class="kt">SMUSDX</td>
- <td class="kt">Dual 16-bit signed multiply with exchange returning difference</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLSD">__SMLSD</a></b></td>
- <td class="kt">SMLSD</td>
- <td class="kt">Q setting dual 16-bit signed multiply subtract with 32-bit accumulate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLSDX">__SMLSDX</a></b></td>
- <td class="kt">SMLSDX</td>
- <td class="kt">Q setting dual 16-bit signed multiply with exchange subtract with 32-bit accumulate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLSLD">__SMLSLD</a></b></td>
- <td class="kt">SMLSLD</td>
- <td class="kt">Q setting dual 16-bit signed multiply subtract with 64-bit accumulate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SMLSLDX">__SMLSLDX</a></b></td>
- <td class="kt">SMLSLDX</td>
- <td class="kt">Q setting dual 16-bit signed multiply with exchange subtract with 64-bit accumulate</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__SEL">__SEL</a></b></td>
- <td class="kt">SEL</td>
- <td class="kt">Select bytes based on GE bits</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QADD">__QADD</a></b></td>
- <td class="kt">QADD</td>
- <td class="kt">Q setting saturating add</td>
- </tr>
- <tr>
- <td class="kt"><b><a href="#__QSUB">__QSUB</a></b></td>
- <td class="kt">QSUB/td>
- <td class="kt">Q setting saturating subtract</td>
- </tr>
- </tbody>
- </table>
- <!-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
- <!-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
- <h3><a name="__SADD8"></a>Function __SADD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four 8-bit signed integer additions.<br>
- The GE bits in the APSR are set according to the results of the additions.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit summands.</li>
- <li><b>val2</b>: second four 8-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the first bytes from each operand, in the first byte of the return value.</li>
- <li>the addition of the second bytes of each operand, in the second byte of the return value.</li>
- <li>the addition of the third bytes of each operand, in the third byte of the return value.</li>
- <li>the addition of the fourth bytes of each operand, in the fourth byte of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[7:0] ≥ 0 then APSR.GE[0] = 1 else 0</li>
- <li>if res[15:8] ≥ 0 then APSR.GE[1] = 1 else 0</li>
- <li>if res[23:16] ≥ 0 then APSR.GE[2] = 1 else 0</li>
- <li>if res[31:24] ≥ 0 then APSR.GE[3] = 1 else 0</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] + val2[7:0]
- res[15:8] = val1[15:8] + val2[15:8]
- res[23:16] = val1[23:16] + val2[23:16]
- res[31:24] = val1[31:24] + val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QADD8"></a>Function __QADD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four 8-bit integer additions, saturating the results to
- the 8-bit signed integer range -2<sup>7</sup> ≤ x ≤ 2<sup>7</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit summands.</li>
- <li><b>val2</b>: second four 8-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the saturated addition of the first byte of each operand in the first byte of the return value.</li>
- <li>the saturated addition of the second byte of each operand in the second byte of the return value.</li>
- <li>the saturated addition of the third byte of each operand in the third byte of the return value.</li>
- <li>the saturated addition of the fourth byte of each operand in the fourth byte of the return value.</li>
- </ul>
- <p>The returned results are saturated to the 16-bit signed integer range -2<sup>7</sup> ≤ x ≤ 2<sup>7</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] + val2[7:0]
- res[15:8] = val1[15:8] + val2[15:8]
- res[23:16] = val1[23:16] + val2[23:16]
- res[31:24] = val1[31:24] + val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SHADD8"></a>Function __SHADD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SHADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four signed 8-bit integer additions, halving the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit summands.</li>
- <li><b>val2</b>: second four 8-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved addition of the first bytes from each operand, in the first byte of the return value.</li>
- <li>the halved addition of the second bytes from each operand, in the second byte of the return value.</li>
- <li>the halved addition fo the third bytes from each operand, in the third byte of the return value.</li>
- <li>the halved addition of the fourth bytes from each operand, in the fourth byte of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = (val1[7:0] + val2[7:0]) >> 1
- res[15:8] = (val1[15:8] + val2[15:8]) >> 1
- res[23:16] = (val1[23:16] + val2[23:16]) >> 1
- res[31:24] = (val1[31:24] + val2[31:24]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UADD8"></a>Function __UADD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit integer additions.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit summands for each addition.</li>
- <li><b>val2</b>: second four 8-bit summands for each addition.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the first bytes in each operand, in the first byte of the return value.</li>
- <li>the addition of the second bytes in each operand, in the second byte of the return value.</li>
- <li>the addition of the third bytes in each operand, in the third byte of the return value.</li>
- <li>the addition of the fourth bytes in each operand, in the fourth byte of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[7:0] ≥ 0x100 then APSR.GE[0] = 1 else 0</li>
- <li>if res[15:8] ≥ 0x100 then APSR.GE[1] = 1 else 0</li>
- <li>if res[23:16] ≥ 0x100 then APSR.GE[2] = 1 else 0</li>
- <li>if res[31:24] ≥ 0x100 then APSR.GE[3] = 1 else 0</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] + val2[7:0]
- res[15:8] = val1[15:8] + val2[15:8]
- res[23:16] = val1[23:16] + val2[23:16]
- res[31:24] = val1[31:24] + val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UQADD8"></a>Function __UQADD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UQADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit integer additions, saturating the
- results to the 8-bit unsigned integer range 0 ≤ x ≤ 2<sup>8</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit summands.</li>
- <li><b>val2</b>: second four 8-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the first bytes in each operand, in the first byte of the return value.</li>
- <li>the addition of the second bytes in each operand, in the second byte of the return value.</li>
- <li>the addition of the third bytes in each operand, in the third byte of the return value.</li>
- <li>the addition of the fourth bytes in each operand, in the fourth byte of the return value.</li>
- </ul>
- <p>The results are saturated to the 8-bit unsigned integer range 0 ≤ x ≤ 2<sup>8</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] + val2[7:0]
- res[15:8] = val1[15:8] + val2[15:8]
- res[23:16] = val1[23:16] + val2[23:16]
- res[31:24] = val1[31:24] + val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UHADD8"></a>Function __UHADD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UHADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit integer additions, halving the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit summands.</li>
- <li><b>val2</b>: second four 8-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved addition of the first bytes in each operand, in the first byte of the return value.</li>
- <li>the halved addition of the second bytes in each operand, in the second byte of the return value.</li>
- <li>the halved addition of the third bytes in each operand, in the third byte of the return value.</li>
- <li>the halved addition of the fourth bytes in each operand, in the fourth byte of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = (val1[7:0] + val2[7:0]) >> 1
- res[15:8] = (val1[15:8] + val2[15:8]) >> 1
- res[23:16] = (val1[23:16] + val2[23:16]) >> 1
- res[31:24] = (val1[31:24] + val2[31:24]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SSUB8"></a>Function __SSUB8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SSUB8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four 8-bit signed integer subtractions.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands of each subtraction.</li>
- <li><b>val2</b>: second four 8-bit operands of each subtraction.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the first byte in the second operand from the first byte in the
- first operand, in the first bytes of the return value.</li>
- <li>the subtraction of the second byte in the second operand from the second byte in
- the first operand, in the second byte of the return value.</li>
- <li>the subtraction of the third byte in the second operand from the third byte in the
- first operand, in the third byte of the return value.</li>
- <li>the subtraction of the fourth byte in the second operand from the fourth byte in
- the first operand, in the fourth byte of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation. If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[8:0] ≥ 0 then APSR.GE[0] = 1 else 0</li>
- <li>if res[15:8] ≥ 0 then APSR.GE[1] = 1 else 0</li>
- <li>if res[23:16] ≥ 0 then APSR.GE[2] = 1 else 0</li>
- <li>if res[31:24] ≥ 0 then APSR.GE[3] = 1 else 0</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] - val2[7:0]
- res[15:8] = val1[15:8] - val2[15:8]
- res[23:16] = val1[23:16] - val2[23:16]
- res[31:24] = val1[31:24] - val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QSUB8"></a>Function __QSUB8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QADD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four 8-bit integer subtractions, saturating the results
- to the 8-bit signed integer range -2<sup>7</sup> ≤ x ≤ 2<sup>7</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands.</li>
- <li><b>val2</b>: second four 8-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the first byte in the second operand from the first byte in the
- first operand, in the first byte of the return value.</li>
- <li>the subtraction of the second byte in the second operand from the second byte in
- the first operand, in the second byte of the return value.</li>
- <li>the subtraction of the third byte in the second operand from the third byte in the
- first operand, in the third byte of the return value.</li>
- <li>the subtraction of the fourth byte in the second operand from the fourth byte in
- the first operand, in the fourth byte of the return value.</li>
- </ul>
- <p>The returned results are saturated to the 8-bit signed integer range -2<sup>7</sup> ≤ x ≤ 2<sup>7</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] - val2[7:0]
- res[15:8] = val1[15:8] - val2[15:8]
- res[23:16] = val1[23:16] - val2[23:16]
- res[31:24] = val1[31:24] - val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SHSUB8"></a>Function __SHSUB8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SHSUB8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four signed 8-bit integer subtractions, halving the
- results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands.</li>
- <li><b>val2</b>: second four 8-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved subtraction of the first byte in the second operand from the first byte
- in the first operand, in the first byte of the return value.</li>
- <li>the halved subtraction of the second byte in the second operand from the second
- byte in the first operand, in the second byte of the return value.</li>
- <li>the halved subtraction of the third byte in the second operand from the third byte
- in the first operand, in the third byte of the return value.</li>
- <li>the halved subtraction of the fourth byte in the second operand from the fourth
- byte in the first operand, in the fourth byte of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = (val1[7:0] - val2[7:0]) >> 1
- res[15:8] = (val1[15:8] - val2[15:8]) >> 1
- res[23:16] = (val1[23:16] - val2[23:16] >> 1
- res[31:24] = (val1[31:24] - val2[31:24] >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__USUB8"></a>Function __USUB8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __USUB8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function It enables you to perform four 8-bit unsigned integer subtractions.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands.</li>
- <li><b>val2</b>: second four 8-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the first byte in the second operand from the first byte in the
- first operand, in the first byte of the return value.</li>
- <li>the subtraction of the second byte in the second operand from the second byte in
- the first operand, in the second byte of the return value.</li>
- <li>the subtraction of the third byte in the second operand from the third byte in the
- first operand, in the third byte of the return value.</li>
- <li>the subtraction of the fourth byte in the second operand from the fourth byte in
- the first operand, in the fourth byte of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[7:0] ≥ 0 then APSR.GE[0] = 1 else 0</li>
- <li>if res[15:8] ≥ 0 then APSR.GE[1] = 1 else 0</li>
- <li>if res[23:16] ≥ 0 then APSR.GE[2] = 1 else 0</li>
- <li>if res[31:24] ≥ 0 then APSR.GE[3] = 1 else 0</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] - val2[7:0]
- res[15:8] = val1[15:8] - val2[15:8]
- res[23:16] = val1[23:16] - val2[23:16]
- res[31:24] = val1[31:24] - val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UQSUB8"></a>Function __UQSUB8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UQSUB8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit integer subtractions, saturating
- the results to the 8-bit unsigned integer range 0 ≤ x ≤ 2<sup>8</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands.</li>
- <li><b>val2</b>: second four 8-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the first byte in the second operand from the first byte in the
- first operand, in the first byte of the return value.</li>
- <li>the subtraction of the second byte in the second operand from the second byte in
- the first operand, in the second byte of the return value.</li>
- <li>the subtraction of the third byte in the second operand from the third byte in the
- first operand, in the third byte of the return value.</li>
- <li>the subtraction of the fourth byte in the second operand from the fourth byte in
- the first operand, in the fourth byte of the return value.</li>
- </ul>
- <p>The results are saturated to the 8-bit unsigned integer range 0 ≤ x ≤ 2<sup>8</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = val1[7:0] - val2[7:0]
- res[15:8] = val1[15:8] - val2[15:8]
- res[23:16] = val1[23:16] - val2[23:16]
- res[31:24] = val1[31:24] - val2[31:24]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UHSUB8"></a>Function __UHSUB8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UHSUB8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit integer subtractions, halving the
- results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands.</li>
- <li><b>val2</b>: second four 8-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved subtraction of the first byte in the second operand from the first byte
- in the first operand, in the first byte of the return value.</li>
- <li>the halved subtraction of the second byte in the second operand from the second
- byte in the first operand, in the second byte of the return value.</li>
- <li>the halved subtraction of the third byte in the second operand from the third byte
- in the first operand, in the third byte of the return value.</li>
- <li>the halved subtraction of the fourth byte in the second operand from the fourth
- byte in the first operand, in the fourth byte of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[7:0] = (val1[7:0] - val2[7:0]) >> 1
- res[15:8] = (val1[15:8] - val2[15:8]) >> 1
- res[23:16] = (val1[23:16] - val2[23:16]) >> 1
- res[31:24] = (val1[31:24] - val2[31:24]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SADD16"></a>Function __SADD16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SADD16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit signed integer additions.<br>
- The GE bits in the APSR are set according to the results of the additions.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit summands.</li>
- <li><b>val2</b>: second two 16-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the low halfwords in the low halfword of the return value.</li>
- <li>the addition of the high halfwords in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[15:0]
- res[31:16] = val1[31:16] + val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QADD16"></a>Function __QADD16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QADD16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit integer arithmetic additions in parallel,
- saturating the results to the 16-bit signed integer range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit summands.</li>
- <li><b>val2</b>: second two 16-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the saturated addition of the low halfwords in the low halfword of the return value.</li>
- <li>the saturated addition of the high halfwords in the high halfword of the return value.</li>
- </ul>
- <p>The returned results are saturated to the 16-bit signed integer
- range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[15:0]
- res[16:31] = val1[31:16] + val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SHADD16"></a>Function __SHADD16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SHADD16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two signed 16-bit integer additions, halving the
- results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit summands.</li>
- <li><b>val2</b>: second two 16-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved addition of the low halfwords from each operand, in the low halfword
- of the return value.</li>
- <li>the halved addition of the high halfwords from each operand, in the high halfword
- of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] + val2[15:0]) >> 1
- res[31:16] = (val1[31:16] + val2[31:16]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UADD16"></a>Function __UADD16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UADD16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit unsigned integer additions.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit summands for each addition.</li>
- <li><b>val2</b>: second two 16-bit summands for each addition.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the low halfwords in each operand, in the low halfword of the
- return value.</li>
- <li>the addition of the high halfwords in each operand, in the high halfword of the
- return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0x10000 then APSR.GE[0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0x10000 then APSR.GE[1] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[15:0]
- res[31:16] = val1[31:16] + val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UQADD16"></a>Function __UQADD16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UQADD16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two unsigned 16-bit integer additions, saturating the
- results to the 16-bit unsigned integer range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit summands.</li>
- <li><b>val2</b>: second two 16-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the low halfword in the first operand and the low halfword in the
- second operand, in the low halfword of the return value.</li>
- <li>the addition of the high halfword in the first operand and the high halfword in the
- second operand, in the high halfword of the return value.</li>
- </ul>
- <p>The results are saturated to the 16-bit unsigned integer
- range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[15:0]
- res[31:16] = val1[31:16] + val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UHADD16"></a>Function __UHADD16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UHADD16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two unsigned 16-bit integer additions, halving the
- results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit summands.</li>
- <li><b>val2</b>: second two 16-bit summands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved addition of the low halfwords in each operand, in the low halfword of
- the return value.</li>
- <li>the halved addition of the high halfwords in each operand, in the high halfword
- of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] + val2[15:0]) >> 1
- res[31:16] = (val1[31:16] + val2[31:16]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SSUB16"></a>Function __SSUB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SSUB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit signed integer subtractions.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands of each subtraction.</li>
- <li><b>val2</b>: second two 16-bit operands of each subtraction.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the low halfword in the second operand from the low halfword
- in the first operand, in the low halfword of the return value.</li>
- <li>the subtraction of the high halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[15:0]
- res[31:16] = val1[31:16] - val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QSUB16"></a>Function __QSUB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QSUB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit integer subtractions, saturating the
- results to the 16-bit signed integer range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands.</li>
- <li><b>val2</b>: second two 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the saturated subtraction of the low halfword in the second operand from the low
- halfword in the first operand, in the low halfword of the returned result.</li>
- <li>the saturated subtraction of the high halfword in the second operand from the high
- halfword in the first operand, in the high halfword of the returned result.</li>
- </ul>
- <p>The returned results are saturated to the 16-bit signed integer
- range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[15:0]
- res[31:16] = val1[31:16] - val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SHSUB16"></a>Function __SHSUB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SHSUB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two signed 16-bit integer subtractions, halving the
- results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands.</li>
- <li><b>val2</b>: second two 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved subtraction of the low halfword in the second operand from the low
- halfword in the first operand, in the low halfword of the return value.</li>
- <li>the halved subtraction of the high halfword in the second operand from the high
- halfword in the first operand, in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] - val2[15:0]) >> 1
- res[31:16] = (val1[31:16] - val2[31:16]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__USUB16"></a>Function __USUB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __USUB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit unsigned integer subtractions.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands.</li>
- <li><b>val2</b>: second two 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the low halfword in the second operand from the low halfword
- in the first operand, in the low halfword of the return value.</li>
- <li>the subtraction of the high halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[15:0]
- res[31:16] = val1[31:16] - val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UQSUB16"></a>Function __UQSUB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UQSUB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two unsigned 16-bit integer subtractions, saturating
- the results to the 16-bit unsigned integer range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands for each subtraction.</li>
- <li><b>val2</b>: second two 16-bit operands for each subtraction.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the low halfword in the second operand from the low halfword
- in the first operand, in the low halfword of the return value.</li>
- <li>the subtraction of the high halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>The results are saturated to the 16-bit unsigned integer range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[15:0]
- res[31:16] = val1[31:16] - val2[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UHSUB16"></a>Function __UHSUB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UHSUB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two unsigned 16-bit integer subtractions, halving
- the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands.</li>
- <li><b>val2</b>: second two 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved subtraction of the low halfword in the second operand from the low
- halfword in the first operand, in the low halfword of the return value.</li>
- <li>the halved subtraction of the high halfword in the second operand from the high
- halfword in the first operand, in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] - val2[15:0]) >> 1
- res[31:16] = (val1[31:16] - val2[31:16]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SASX"></a>Function __SASX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SASX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function inserts an SASX instruction into the instruction stream generated by the
- compiler. It enables you to exchange the halfwords of the second operand, add the high
- halfwords and subtract the low halfwords.<br>
- The GE bits in the APRS are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the subtraction in the low halfword, and the
- first operand for the addition in the high halfword.</li>
- <li><b>val2</b>: second operand for the subtraction in the high halfword, and the
- second operand for the addition in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the high halfword in the second operand from the low halfword
- in the first operand, in the low halfword of the return value.</li>
- <li>the addition of the high halfword in the first operand and the low halfword in the
- second operand, in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[31:16]
- res[31:16] = val1[31:16] + val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QASX"></a>Function __QASX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QASX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the one operand, then add the high
- halfwords and subtract the low halfwords, saturating the results to the 16-bit signed
- integer range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the subtraction in the low halfword, and the
- first operand for the addition in the high halfword.</li>
- <li><b>val2</b>: second operand for the subtraction in the high halfword, and the
- second operand for the addition in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the saturated subtraction of the high halfword in the second operand from the low
- halfword in the first operand, in the low halfword of the return value.</li>
- <li>the saturated addition of the high halfword in the first operand and the low
- halfword in the second operand, in the high halfword of the return value.</li>
- </ul>
- <p>The returned results are saturated to the 16-bit signed integer
- range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[31:16]
- res[31:16] = val1[31:16] + val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SHASX"></a>Function __SHASX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SHASX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the two halfwords of one operand, perform one
- signed 16-bit integer addition and one signed 16-bit subtraction, and halve the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands.</li>
- <li><b>val2</b>: second 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved subtraction of the high halfword in the second operand from the low
- halfword in the first operand, in the low halfword of the return value.</li>
- <li>the halved subtraction of the low halfword in the second operand from the high
- halfword in the first operand, in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] - val2[31:16]) >> 1
- res[31:16] = (val1[31:16] - val2[15:0]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UASX"></a>Function __UASX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UASX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the two halfwords of the second operand, add the
- high halfwords and subtract the low halfwords.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the subtraction in the low halfword, and the
- first operand for the addition in the high halfword.</li>
- <li><b>val2</b>: second operand for the subtraction in the high halfword and the
- second operand for the addition in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the high halfword in the second operand from the low halfword
- in the first operand, in the low halfword of the return value.</li>
- <li>the addition of the high halfword in the first operand and the low halfword in the
- second operand, in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0x10000 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[31:16]
- res[31:16] = val1[31:16] + val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UQASX"></a>Function __UQASX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UQASX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand and perform
- one unsigned 16-bit integer addition and one unsigned 16-bit subtraction, saturating the
- results to the 16-bit unsigned integer range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first two 16-bit operands.</li>
- <li><b>val2</b>: second two 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the high halfword in the second operand from the low halfword
- in the first operand, in the low halfword of the return value.</li>
- <li>the subtraction of the low halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>The results are saturated to the 16-bit unsigned integer
- range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] - val2[31:16]
- res[31:16] = val1[31:16] + val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UHASX"></a>Function __UHASX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UHASX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand, add the high
- halfwords and subtract the low halfwords, halving the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the subtraction in the low halfword, and the
- first operand for the addition in the high halfword.</li>
- <li><b>val2</b>: second operand for the subtraction in the high halfword, and the
- second operand for the addition in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved subtraction of the high halfword in the second operand from the low
- halfword in the first operand.</li>
- <li>the halved addition of the high halfword in the first operand and the low halfword
- in the second operand.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] - val2[31:16]) >> 1
- res[31:16] = (val1[31:16] + val2[15:0]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SSAX"></a>Function __SSAX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SSAX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the two halfwords of one operand and perform one
- 16-bit integer subtraction and one 16-bit addition.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the addition in the low halfword, and the first
- operand for the subtraction in the high halfword.</li>
- <li><b>val2</b>: second operand for the addition in the high halfword, and the
- second operand for the subtraction in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the low halfword in the first operand and the high halfword in the
- second operand, in the low halfword of the return value.</li>
- <li>the subtraction of the low halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[31:16]
- res[31:16] = val1[31:16] - val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QSAX"></a>Function __QSAX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QSAX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of one operand, then subtract the
- high halfwords and add the low halfwords, saturating the results to the 16-bit signed
- integer range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the addition in the low halfword, and the first
- operand for the subtraction in the high halfword.</li>
- <li><b>val2</b>: second operand for the addition in the high halfword, and the
- second operand for the subtraction in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the saturated addition of the low halfword of the first operand and the high
- halfword of the second operand, in the low halfword of the return value.</li>
- <li>the saturated subtraction of the low halfword of the second operand from the high
- halfword of the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>The returned results are saturated to the 16-bit signed integer
- range -2<sup>15</sup> ≤ x ≤ 2<sup>15</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[31:16]
- res[31:16] = val1[31:16] - val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SHSAX"></a>Function __SHSAX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SHSAX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the two halfwords of one operand, perform one
- signed 16-bit integer subtraction and one signed 16-bit addition, and halve the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands.</li>
- <li><b>val2</b>: second 16-bit operands.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved addition of the low halfword in the first operand and the high halfword
- in the second operand, in the low halfword of the return value.</li>
- <li>the halved subtraction of the low halfword in the second operand from the high
- halfword in the first operand, in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] + val2[31:16]) >> 1
- res[31:16] = (val1[31:16] - val2[15:0]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__USAX"></a>Function __USAX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __USAX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand, subtract the
- high halfwords and add the low halfwords.<br>
- The GE bits in the APSR are set according to the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the addition in the low halfword, and the first
- operand for the subtraction in the high halfword.</li>
- <li><b>val2</b>: second operand for the addition in the high halfword, and the
- second operand for the subtraction in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the low halfword in the first operand and the high halfword in the
- second operand, in the low halfword of the return value.</li>
- <li>the subtraction of the low halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>Each bit in APSR.GE is set or cleared for each byte in the return value, depending on
- the results of the operation.<br>
- If <i>res</i> is the return value, then:
- </p>
- <ul style="margin-top:0px">
- <li>if res[15:0] ≥ 0x10000 then APSR.GE[1:0] = 11 else 00</li>
- <li>if res[31:16] ≥ 0 then APSR.GE[3:2] = 11 else 00</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[31:16]
- res[31:16] = val1[31:16] - val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UQSAX"></a>Function __UQSAX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UQSAX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand and perform
- one unsigned 16-bit integer subtraction and one unsigned 16-bit addition, saturating the
- results to the 16-bit unsigned integer range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operand for the addition in the low halfword, and the
- first 16-bit operand for the subtraction in the high halfword.</li>
- <li><b>val2</b>: second 16-bit halfword for the addition in the high halfword,
- and the second 16-bit halfword for the subtraction in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the addition of the low halfword in the first operand and the high halfword in the
- second operand, in the low halfword of the return value.</li>
- <li>the subtraction of the low halfword in the second operand from the high halfword
- in the first operand, in the high halfword of the return value.</li>
- </ul>
- <p>The results are saturated to the 16-bit unsigned integer
- range 0 ≤ x ≤ 2<sup>16</sup> - 1.
- </p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + val2[31:16]
- res[31:16] = val1[31:16] - val2[15:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UHSAX"></a>Function __UHSAX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UHSAX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand, subtract the
- high halfwords and add the low halfwords, halving the results.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first operand for the addition in the low halfword, and the first
- operand for the subtraction in the high halfword.</li>
- <li><b>val2</b>: second operand for the addition in the high halfword, and the
- second operand for the subtraction in the low halfword.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the halved addition of the high halfword in the second operand and the low
- halfword in the first operand, in the low halfword of the return value.</li>
- <li>the halved subtraction of the low halfword in the second operand from the high
- halfword in the first operand, in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = (val1[15:0] + val2[31:16]) >> 1
- res[31:16] = (val1[31:16] - val2[15:0]) >> 1</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__USAD8"></a>Function __USAD8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __USAD8(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit subtractions, and add the
- absolute values of the differences together, returning the result as a single unsigned
- integer.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands for the subtractions.</li>
- <li><b>val2</b>: second four 8-bit operands for the subtractions.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the sum of the absolute differences of:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the first byte in the second operand from the first byte in the
- first operand.</li>
- <li>the subtraction of the second byte in the second operand from the second byte in
- the first operand.</li>
- <li>the subtraction of the third byte in the second operand from the third byte in the
- first operand.</li>
- <li>the subtraction of the fourth byte in the second operand from the fourth byte in
- the first operand.</li>
- </ul>
- <p>The sum is returned as a single unsigned integer.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- absdiff1 = val1[7:0] - val2[7:0]
- absdiff2 = val1[15:8] - val2[15:8]
- absdiff3 = val1[23:16] - val2[23:16]
- absdiff4 = val1[31:24] - val2[31:24]
- res[31:0] = absdiff1 + absdiff2 + absdiff3 + absdiff4</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__USADA8"></a>Function __USADA8</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __USADA8(uint32_t val1, uint32_t val2, uint32_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform four unsigned 8-bit subtractions, and add the
- absolute values of the differences to a 32-bit accumulate operand.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first four 8-bit operands for the subtractions.</li>
- <li><b>val2</b>: second four 8-bit operands for the subtractions.</li>
- <li><b>val3</b>: accumulation value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the sum of the absolute differences of the following
- bytes, added to the accumulation value:</p>
- <ul style="margin-top:0px">
- <li>the subtraction of the first byte in the second operand from the first byte in the
- first operand.</li>
- <li>the subtraction of the second byte in the second operand from the second byte in
- the first operand.</li>
- <li>the subtraction of the third byte in the second operand from the third byte in the
- first operand.</li>
- <li>the subtraction of the fourth byte in the second operand from the fourth byte in
- the first operand.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- absdiff1 = val1[7:0] - val2[7:0]
- absdiff2 = val1[15:8] - val2[15:8]
- absdiff3 = val1[23:16] - val2[23:16]
- absdiff4 = val1[31:24] - val2[31:24]
- sum = absdiff1 + absdiff2 + absdiff3 + absdiff4
- res[31:0] = sum[31:0] + val3[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SSAT16"></a>Function __SSAT16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SSAT16(uint32_t val1, const uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to saturate two signed 16-bit values to a selected signed range.<br>
- The Q bit is set if either operation saturates.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: two signed 16-bit values to be saturated.</li>
- <li><b>val2</b>: bit position for saturation, an integral constant expression in the
- range 1 to 16.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns:</p>
- <ul style="margin-top:0px">
- <li>the signed saturation of the low halfword in <i>val1</i>, saturated to the bit position
- specified in <i>val2</i> and returned in the low halfword of the return value.</li>
- <li>the signed saturation of the high halfword in <i>val1</i>, saturated to the bit position
- specified in <i>val2</i> and returned in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- Saturate halfwords in val1 to the signed range specified by the bit position in val2</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__USAT16"></a>Function __USAT16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __USAT16(uint32_t val1, const uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to saturate two signed 16-bit values to a selected unsigned
- range.<br>
- The Q bit is set if either operation saturates.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: two 16-bit values that are to be saturated.</li>
- <li><b>val2</b>: bit position for saturation, and must be an integral constant
- expression in the range 0 to 15.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the saturation of the two signed 16-bit values, as non-negative values.</p>
- <ul style="margin-top:0px">
- <li>the saturation of the low halfword in <i>val1</i>, saturated to the bit position
- specified in <i>val2</i> and returned in the low halfword of the return value.</li>
- <li>the saturation of the high halfword in <i>val1</i>, saturated to the bit position
- specified in <i>val2</i> and returned in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- Saturate halfwords in val1 to the unsigned range specified by the bit position in val2</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UXTB16"></a>Function __UXTB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UXTB16(uint32_t val);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to extract two 8-bit values from an operand and zero-extend
- them to 16 bits each.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: two 8-bit values in val[7:0] and val[23:16] to be sign-extended.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the 8-bit values zero-extended to 16-bit values.</p>
- <ul style="margin-top:0px">
- <li>zero-extended value of val[7:0] in the low halfword of the return value.</li>
- <li>zero-extended value of val[23:16] in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = ZeroExtended(val[7:0] )
- res[31:16] = ZeroExtended(val[23:16])</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__UXTAB16"></a>Function __UXTAB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __UXTAB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to extract two 8-bit values from one operand, zero-extend them
- to 16 bits each, and add the results to two 16-bit values from another operand.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: value added to the zero-extended to 16-bit values.</li>
- <li><b>val2</b>: two 8-bit values to be extracted and zero-extended.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the 8-bit values in <i>val2</i>, zero-extended to 16-bit values
- and added to <i>val1</i>.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = ZeroExt(val2[7:0] to 16 bits) + val1[15:0]
- res[31:16] = ZeroExt(val2[31:16] to 16 bits) + val1[31:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SXTB16"></a>Function __SXTB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SXTB16(uint32_t val);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to extract two 8-bit values from an operand and sign-extend
- them to 16 bits each.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: two 8-bit values in val[7:0] and val[23:16] to be sign-extended.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the 8-bit values sign-extended to 16-bit values.</p>
- <ul style="margin-top:0px">
- <li>sign-extended value of val[7:0] in the low halfword of the return value.</li>
- <li>sign-extended value of val[23:16] in the high halfword of the return value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = SignExtended(val[7:0]
- res[31:16] = SignExtended(val[23:16]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SXTAB16"></a>Function __SXTAB16</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SXTAB16(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to extract two 8-bit values from the second operand (at bit
- positions [7:0] and [23:16]), sign-extend them to 16-bits each, and add the results to the
- first operand.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: values added to the zero-extended to 16-bit values.</li>
- <li><b>val2</b>: two 8-bit values to be extracted and zero-extended.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the addition of <i>val1</i> and <i>val2</i>, where the 8-bit values in
- val2[7:0] and val2[23:16] have been extracted and sign-extended prior to the addition.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[15:0] = val1[15:0] + SignExtended(val2[7:0])
- res[31:16] = val1[31:16] + SignExtended(val2[23:16])</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMUAD"></a>Function __SMUAD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMUAD(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function It enables you to perform two 16-bit signed multiplications, adding the
- products together.<br>
- The Q bit is set if the addition overflows.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the sum of the products of the two 16-bit signed multiplications.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[15:0]
- p2 = val1[31:16] * val2[31:16]
- res[31:0] = p1 + p2</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMUADX"></a>Function __SMUADX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMUADX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit signed multiplications with exchanged
- halfwords of the second operand, adding the products together.<br>
- The Q bit is set if the addition overflows.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the sum of the products of the two 16-bit signed multiplications with exchanged
- halfwords of the second operand.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[31:16]
- p2 = val1[31:16] * val2[15:0]
- res[31:0] = p1 + p2</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLAD"></a>Function __SMLAD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMLAD(uint32_t val1, uint32_t val2, uint32_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two signed 16-bit multiplications, adding both
- results to a 32-bit accumulate operand.<br>
- The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the product of each multiplication added to the accumulate
- value, as a 32-bit integer.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[15:0]
- p2 = val1[31:16] * val2[31:16]
- res[31:0] = p1 + p2 + val3[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLADX"></a>Function __SMLADX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMLADX(uint32_t val1, uint32_t val2, uint32_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two signed 16-bit multiplications with exchanged
- halfwords of the second operand, adding both results to a 32-bit accumulate operand.<br>
- The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the product of each multiplication with exchanged
- halfwords of the second operand added to the accumulate value, as a 32-bit integer.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[31:16]
- p2 = val1[31:16] * val2[15:0]
- res[31:0] = p1 + p2 + val3[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLALD"></a>Function __SMLALD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint64_t __SMLALD(uint32_t val1, uint32_t val2, uint64_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two signed 16-bit multiplications, adding both
- results to a 64-bit accumulate operand. Overflow is only possible as a result of the 64-bit
- addition. This overflow is not detected if it occurs. Instead, the result wraps around
- modulo2<sup>64</sup>.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the product of each multiplication added to the accumulate value.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[15:0]
- p2 = val1[31:16] * val2[31:16]
- sum = p1 + p2 + val3[63:32][31:0]
- res[63:32] = sum[63:32]
- res[31:0] = sum[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLALDX"></a>Function __SMLALDX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- unsigned long long __SMLALDX(uint32_t val1, uint32_t val2, unsigned long long val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand, and perform
- two signed 16-bit multiplications, adding both results to a 64-bit accumulate operand.
- Overflow is only possible as a result of the 64-bit addition. This overflow is not detected
- if it occurs. Instead, the result wraps around modulo2<sup>64</sup>.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the product of each multiplication added to the accumulate value.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[31:16]
- p2 = val1[31:16] * val2[15:0]
- sum = p1 + p2 + val3[63:32][31:0]
- res[63:32] = sum[63:32]
- res[31:0] = sum[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMUSD"></a>Function __SMUSD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMUSD(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit signed multiplications, taking the
- difference of the products by subtracting the high halfword product from the low
- halfword product.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the difference of the products of the two 16-bit signed multiplications.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[15:0]
- p2 = val1[31:16] * val2[31:16]
- res[31:0] = p1 - p2</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMUSDX"></a>Function __SMUSDX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMUSDX(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit signed multiplications, subtracting one
- of the products from the other. The halfwords of the second operand are exchanged
- before performing the arithmetic. This produces top * bottom and bottom * top
- multiplication.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the difference of the products of the two 16-bit signed multiplications.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[31:16]
- p2 = val1[31:16] * val2[15:0]
- res[31:0] = p1 - p2</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLSD"></a>Function __SMLSD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMLSD(uint32_t val1, uint32_t val2, uint32_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to perform two 16-bit signed multiplications, take the
- difference of the products, subtracting the high halfword product from the low halfword
- product, and add the difference to a 32-bit accumulate operand.<br>
- The Q bit is set if the accumulation overflows. Overflow cannot occur during the multiplications or the
- subtraction.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val3</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the difference of the product of each multiplication, added
- to the accumulate value.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[15:0]
- p2 = val1[31:16] * val2[31:16]
- res[31:0] = p1 - p2 + val3[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLSDX"></a>Function __SMLSDX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SMLSDX(uint32_t val1, uint32_t val2, uint32_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords in the second operand, then perform
- two 16-bit signed multiplications. The difference of the products is added to a 32-bit
- accumulate operand.<br>
- The Q bit is set if the addition overflows. Overflow cannot occur during the multiplications or the subtraction.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val3</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the difference of the product of each multiplication, added
- to the accumulate value.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[31:16]
- p2 = val1[31:16] * val2[15:0]
- res[31:0] = p1 - p2 + val3[31:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLSLD"></a>Function __SMLSLD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint64_t __SMLSLD(uint32_t val1, uint32_t val2, uint64_t val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function It enables you to perform two 16-bit signed multiplications, take the
- difference of the products, subtracting the high halfword product from the low halfword
- product, and add the difference to a 64-bit accumulate operand. Overflow cannot occur
- during the multiplications or the subtraction. Overflow can occur as a result of the 64-bit
- addition, and this overflow is not detected. Instead, the result wraps round to
- modulo2<sup>64</sup>.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val3</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the difference of the product of each multiplication,
- added to the accumulate value.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[15:0]
- p2 = val1[31:16] * val2[31:16]
- res[63:0] = p1 - p2 + val3[63:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SMLSLDX"></a>Function __SMLSLDX</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- unsigned long long __SMLSLDX(uint32_t val1, uint32_t val2, unsigned long long val3);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to exchange the halfwords of the second operand, perform two
- 16-bit multiplications, adding the difference of the products to a 64-bit accumulate
- operand. Overflow cannot occur during the multiplications or the subtraction. Overflow
- can occur as a result of the 64-bit addition, and this overflow is not detected. Instead,
- the result wraps round to modulo2<sup>64</sup>.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first 16-bit operands for each multiplication.</li>
- <li><b>val2</b>: second 16-bit operands for each multiplication.</li>
- <li><b>val3</b>: accumulate value.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the difference of the product of each multiplication,
- added to the accumulate value.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- p1 = val1[15:0] * val2[31:16]
- p2 = val1[31:16] * val2[15:0]
- res[63:0] = p1 - p2 + val3[63:0]</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__SEL"></a>Function __SEL</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __SEL(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function inserts a SEL instruction into the instruction stream generated by the
- compiler. It enables you to select bytes from the input parameters, whereby the bytes
- that are selected depend upon the results of previous SIMD instruction function. The
- results of previous SIMD instruction function are represented by the Greater than or
- Equal flags in the Application Program Status Register (APSR).
- The __SEL function works equally well on both halfword and byte operand function
- results. This is because halfword operand operations set two (duplicate) GE bits per
- value.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: four selectable 8-bit values.</li>
- <li><b>val2</b>: four selectable 8-bit values.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function selects bytes from the input parameters and returns them in the
- return value, res, according to the following criteria:</p>
- <ul style="margin-top:0px">
- <li>if APSR.GE[0] == 1 then res[7:0] = val1[7:0] else res[7:0] = val2[7:0]</li>
- <li>if APSR.GE[1] == 1 then res[15:8] = val1[15:8] else res[15:8] = val2[15:8]</li>
- <li>if APSR.GE[2] == 1 then res[23:16] = val1[23:16] else res[23:16] = val2[23:16]</li>
- <li>if APSR.GE[3] == 1 then res[31;24] = val1[31:24] else res = val2[31:24]</li>
- </ul>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QADD"></a>Function __QADD</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QADD(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to obtain the saturating add of two integers.<br>
- The Q bit is set if the operation saturates.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: first summand of the saturating add operation.</li>
- <li><b>val2</b>: second summand of the saturating add operation.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the saturating addition of val1 and val2.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[31:0] = SAT(val1 + SAT(val2 * 2))</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="__QSUB"></a>Function __QSUB</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Summary</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t __QSUB(uint32_t val1, uint32_t val2);</pre>
- </td>
- </tr>
- <tr>
- <td><b>Description</b></td>
- <td>This function enables you to obtain the saturating subtraction of two integers.<br>
- The Q bit is set if the operation saturates.
- </td>
- </tr>
- <tr>
- <td><b>Parameter</b></td>
- <td>
- <ul style="list-style-type:none; margin-left:0px; margin-top:0px">
- <li><b>val1</b>: minuend of the saturating subtraction operation.</li>
- <li><b>val2</b>: subtrahend of the saturating subtraction operation.</li>
- </ul>
- </td>
- </tr>
- <tr>
- <td><b>Return Value</b></td>
- <td>
- <p>The function returns the saturating subtraction of val1 and val2.</p>
- </td>
- </tr>
- <tr>
- <td><b>Operation</b></td>
- <td>
- <pre style="margin-left:0px">
- res[31:0] = SAT(val1 - SAT(val2 * 2))</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <!-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
- <!-- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -->
- <p> </p>
- <h2><a name="Examples"></a>Examples</h2>
- <p>Following are some coding examples using the SIMD functions:
- </p>
- <table class="kt" border="0" cellpadding="0" cellspacing="0">
- <tbody>
- <tr>
- <th class="kt">Name</th>
- <th class="kt">Description</th>
- </tr>
-
- <tr>
- <td class="kt"><b><a href="#Addition">Addition</a></b></td>
- <td class="kt">Add two values using SIMD function</td>
- </tr>
- </tr>
- <tr>
- <td class="kt"><b><a href="#Addition">Subtraction</a></b></td>
- <td class="kt">Subtract two values using SIMD function</td>
- </tr>
- </tr>
- <tr>
- <td class="kt"><b><a href="#Multiplication">Multiplication</a></b></td>
- <td class="kt">Performing a multiplication using SIMD function</td>
- </tr>
- </tr>
- </tbody>
- </table>
- <h3><a name="Addition"></a>Addition</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Example</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t add_halfwords(uint32_t val1, uint32_t val2)
- {
- uint32_t res;
- res = __SADD16(val1, val2);
- return res;
- }</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="Subtraction"></a>Subtraction</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Example</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t sub_halfwords(uint32_t val1, uint32_t val2)
- {
- uint32_t res;
- res = __SSUB16(val1, val2);
- return res;
- }</pre>
- </td>
- </tr>
- </tbody>
- </table>
- <h3><a name="Multiplication"></a>Multiplication</h3>
- <table border="0" cellpadding="5" cellspacing="5">
- <tbody>
- <tr>
- <td><b>Example</b></td>
- <td>
- <pre style="margin-left:0px">
- uint32_t dual_mul_add_products(uint32_t val1, uint32_t val2)
- {
- uint32_t res;
- res = __SMUAD(val1, val2);
- return res;
- }</pre>
- </td>
- </tr>
- </tbody>
- </table>
- </body>
- </html>
|