Apple Microarchitecture Research by Dougall Johnson

M1/A14 P-core (Firestorm): Overview | Base Instructions | SIMD and FP Instructions
M1/A14 E-core (Icestorm):  Overview | Base Instructions | SIMD and FP Instructions

STEOR (32-bit)

Test 1: uops

Code:

  steor w0, [x6]
  nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop ; nop
  mov x0, 0

(no loop instructions)

1000 unrolls and 1 iteration

Retires (minus 70 nops): 3.000

Issues: 3.003

Integer unit issues: 1.003

Load/store unit issues: 2.000

SIMD/FP unit issues: 0.000

retire uop (01)cycle (02)03l1i tlb fill (04)mmu table walk instruction (07)09l2 tlb miss instruction (0a)0e0f1e223a3f51schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)5f696a6d6emap rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map ldst uop (7d)map int uop inputs (7f)map ldst uop inputs (80)8283flush restart other nonspec (84)85inst all (8c)inst int load (95)inst ldst (9b)9dl1d tlb access (a0)l1d cache miss st (a2)l1d cache miss ld (a3)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)acafbbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)c2cfd0d1d2l1i cache miss demand (d3)l1i tlb miss demand (d4)d5map dispatch bubble (d6)d9dadbddfetch restart (de)e0? int output thing (e9)eaebec? ldst retires (ed)? int retires (ef)f5f6f7f8fd
73005341952553323001000054133390622106300010032000100020001097916887349309683388334134310300010002000200040003409526821171001100010000200022100510000320022022015110107401808236510712410738064442176866329641004188271641117634200010003405633987340723415834177
73004342692551110001005054423391522092300010002000100020001099716881049309103388234094310300010002000200040003385726951171001100010000200002100310000220022022015037105290800236340672425335914445175860329641004190471673417822200010003407334173340503411234076
73004340042572101001005053023390822108300410002000100020001098016884049310033407033941310300010002000200040003399026901171001100010000200020100310000220020022015106105400805236190602418636054445166363330081003187321661117570200010003409034077340483407434169
73004342082562000001005053633387822126300010002000100020001099616905049309963387834092326300010002000200040003400127001171001100010000200022100010000220022022015080106760800935950562416036664443195859333811004188661673317562200010003416334206341393407234175
73004341132562000001004157253393821999300310032000100020001090316808049310343398534083310300010002000200040003399627091171001100010000200022100010001020002022015416106490799335590592410035694446196156330071000190861632317497200010003404234181341703411134076
73004341122561101001009053523387022071300310032000100020001097916882049310793391634153310300010002000200040003395326771171001100010000200022100010000020032020014880105861801136030622414435514444186054329591000187821665917531200010003406734125342143414134085
73004340722552000001000053413396822079300410002000100020001090716887049309603383334087310300010002000200040003409926981171001100010000200002100210000220000022015047106650804735470552424935894446106159330411000189161653217711200010003410234081342613405134071
73004341732553101001004056183406522100300310002000100020001097716883349310043391834152310300010002000200040003407727131171001100010000200020100010000020022002015016105510793636050592432535544442235961330201000189701662617456200010003412534181341093420234213
73004340812552000001000152823392822028300010042000100020001097816886349310263385734008310300010002000200040003400126771171001100010000200022100010000220022000014922110860802135700552408536184445125658330351004190111671117708200010003403734103340213403834027
73004340772544000001004154493394622075300410032000100120001097416815049308363382134067310300010002000200040003400226901171001100010000200000100310000020002020014940106820800436150552415836234443175954329941003184681667917616200010003410734202341343410834071

Test 2: throughput

Code:

  steor w0, [x6]
  add x6, x6, 4

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 3.0071

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk data (08)l2 tlb miss data (0b)0e0f1e1f2022293a3e3f404346494f51schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)6067696a6d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map ldst uop (7d)map int uop inputs (7f)map ldst uop inputs (80)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst branch cond (94)inst int load (95)inst int alu (97)inst ldst (9b)9d9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss st (a2)l1d cache miss ld (a3)a4ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9aaabacafb6bbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)c2cfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
40207300802251000236888225112858430054215861561296925406972070920000201002000091390114127361252492699530072300852482832502940100202002000030200400003007168112020110099100100001010010000010020216070928101031110037160272501882038261981272726001310117113007720550101020000201003007630076300723007630072
4020430075225000003668720811927110030065246979511295625406712075120000201002000091357414129011279492699130075300752481632502840100202002000030200400003007564112020110099100100001010010000010020174052425701032110061210191541712041721711218499001310116113006820530101020000201003007230072300723007230202
40204300752260010036319231186314030060173760771295025406122055720000201002000091376014129390276492699530075300752482032503340100202002000030200400003007564112020110099100100001010010000010020240057825401027810037210239561572034831731205623001310116113006820505101020000201003007230076300763007630076
4020430079225000003715218010604430060183665621295625406372060520000201002000091331114127811260492699130080300802482032502740100202002000030200400003007168112020110099100100001010010000010020204054126501026910034190212321622036671541164647001310116113006820539101020000201003007230076300763007630072
4020430080225111003692118910465630060213459591295125405792065120000201002000091341014132021321492699530075300712482232503740100202002000030200400003007169112020110099100100001010010000010020185048025801028810046250193642152031541911238550001310116113006820489101020000201003007230072300723007230072
40204300712260000037091256105984300561811378791295525406002070220000201002000091354114130681239492699530072300752481632502840100202002000030200400003007567112020110099100100001010010000110020238066130601029010042170190322052031441442170535001310116113007220556101020000201003008630086300813008130076
40204300802251000037021223104818830060174683871298125405942061620000201002000091392214129491279492699530075300712481932502840100202002000030200400003007169112020110099100100001010010000010020167056129301027810076240209701782027681861183615001310117113006820479101020000201003007230072300763008130072
40204300712250000036501207110453104300561887817212966254067920646200002010020000913687141289802824926995300683007124815325028401002020020000302004000030071681120201100991001000010100100000100202190556304010253100522102097622520383413911974801301310116113006820566101020000201003007630076300763007230080
4020430071225000003689217918771683006017856263129812540685206832000020100200009135831412881027649270003007230075247973250334010020200200003020040000300756411202011009910010000101001000001002021213576264010240100472411615815120289418482344351401310116113006820545131320000201003008130086300813008630076
402043007522500000372182141051112300561411744751290625406282064720000201002000091362214128100312492699530071300712481232503240100202002000030200400003007169112020110099100100001010010000010020172045820901019610028250185641702025151951204599001310116113008220586131320000201003007630081300763007630086

1000 unrolls and 10 iterations

Result (median cycles for code): 3.0071

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk instruction (07)mmu table walk data (08)09l2 tlb miss instruction (0a)l2 tlb miss data (0b)0e0f18191e1f20222324293a3e3f404346494f51schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)6067696a6d6emap stall dispatch (70)rob full (74)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map ldst uop (7d)map int uop inputs (7f)map ldst uop inputs (80)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)92inst branch cond (94)inst int load (95)inst int alu (97)inst ldst (9b)9d9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss st (a2)l1d cache miss ld (a3)a4ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9aaabacafb6bbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)c2branch mispred nonspec (cb)cfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
400273007122510010010003646225110016641083005617976892129532540555205292000020010200009129141412785124749269913006830069248420325051400102002020000300204000030075641120022109010100001001010000010201354497307010197100462001893423520270813111684870001270121610103006820507101020000200103007630076300723007630076
400243007122500000010003820118510005318830056159466841297725405822051320000200102000091305614128121267492699130072300752484003250514001020020200003002040000300716811200211090101000010010100000102021445293700102411004123121160147203015106220953430012709168103006820496101020000200103007630076300763007630072
40024300712250000001000379822201000554300561734777112970254050120598200002001020000913403141302312614926991300713007224836032505040010200202000030020400003007169112002110901010000100101000001020179054323301033310062260195242082074671151262501000127010169103006820498101020000200103007230196300723007230621
40024300752251000011000361442131000401563006017965054129612540539205222000020010200009131701412775123749269913007130073248360325051400102002020000300204000030071681120021109010100001001010000010201790479280010244100702402388419720307511322265470201270716793006820473101020000200103007230072300723007230072
40024300712250000000000376541871000491723005617675166129352540541205782000020010200009130251412740127749269913006830071248390325052400102002020000300204000030071681120021109010100001001010000010202480611237010243100392401351321622026611022174335000127010169103006820472101020000200103007630076300763007630076
4002430071226000000000036594183100042963005619376766129852540473205612000020010200009216701412924126649269953007530075248400325055400102002020000300204000030071691120021109010100001001010000010202240497237010245100792802038017420254313451984193101270916993007220510101020000200103007230072300723007230072
400243007122500000000003698616910005040300562054515312876254053620553200002001020000912844141273212494926991300683007524835032505140010200202000030020400003007564112002110901010000100101000001020203342022801022710048200221721792031759031694542201270915993006820478101020000200103007230487300723007430072
4002430071225101111000037411169100051563005615911766112958254047120452200002001020000912769141286312734926991300713007124835032505140010200202000030020400003007169112002110901010000100101000001020238567925801026910040250270761732026071082158511000127010169103007220578101020000200103007630076300723007230072
400243007122500000000003610514510004588300561394615912986254055620591200002001020000912981141295612784926991300723007524838032505140010200202000030020400003007569112002110901010000100101000001020239552126401024010030220197501522028461342244368000127010168113006820591101020000200103007230072300723007230076
4002430071225000000000036106257100064204300602557975312951254045820500200002001020000912684141276912604926991300713007124835032505540296200202000030020400003007168112002110901010000100101000001020198074121701031610035240240106247203545127320350230012709161093006820503101020000200103007630076300723048930072

Test 3: throughput

Code:

  steor w0, [x6]
  mov x7, 8

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 10.3241

retire uop (01)cycle (02)03mmu table walk data (08)09l2 tlb miss data (0b)0e0f18191e1f22233a3f4346494f51schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)6067696a6d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)797bmap int uop (7c)map ldst uop (7d)map int uop inputs (7f)map ldst uop inputs (80)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)92inst branch cond (94)inst int load (95)inst int alu (97)inst ldst (9b)9d9fl1d tlb access (a0)l1d cache miss st (a2)l1d cache miss ld (a3)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)acafbbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)c2branch cond mispred nonspec (c5)branch mispred nonspec (cb)cdcfd1d5map dispatch bubble (d6)ddfetch restart (de)e0e7? int output thing (e9)eaebec? ldst retires (ed)? int retires (ef)f5f6f7f8fd
30205111296841010000020687100010590117084879254038719997205021010020000447358549864390297491029651050061045061014287100699301008468161020320005202064000910494138311102011009901001000010010000110020000343319870100000974029388936002833011171727016001013381319603131002000010100105033105388105433105760104580
30204103960777000100019635110110369100086088254123420691203851010020000453301649565970331491013411023991013989682622996153010087610331020320005202064000995712559111020110099010010000100100000100200003426185991000011003529899957802931011171719016001027534199551414020000101009813296694968529661494036
302049389471100000002017610029972010779354254092819462205901010020000447922249009840283491009731052891049781008926100501301008516341020020000202004000010358958411102011009901001000010010000010020000042193451000018931291688752124340111722232252210268511201391013020000101009970398420984339836598852
30204994207570001100211950011973270908170425396341946220559101002000045608484840775055249997791005571019179710961004033010084178110200200002020040000104154601111020110099010010000100100000100200003302034410001010424305739942023340111722022522984202819685101402000010100105211105022104851103940103634
302041061768030010100218341001101769011984330254059419394209431010020000417913647112840134491009751047131031109815769563530100142797710200203962020040000102356375111020110099010010000100100000100200003530232731000101134129885111451320011172216225221047702419399131012000010100105532105978104628102035103333
302041055977870000100192341002101790091085519254017419884201391010020000475142149569340133499729410032610052196765698274301001650144610200200002020040000970745131110201100990100100001001000001002000034291936210001099063066386660223201117220224221022141519360141402000010100988409837799214100362100733
302041050057780001000180631002102714061085858254012020086202241010020000463357749429940170499956310290610324997647699545301001033926102002000020200400001050143991110201100990100100001001000001002000031341974710000087962871791260223101117221622522103499122151814002000010100105341104607105185103657103421
30204104916790000010020623100210189208885056254036520786205701015420000453148649562930129499847310068698724939746962623010080766110200200002020040000103235518111020110099010010000100100000100200000301942610001112389310011030213000111722232242210077902013401402000010100102503104496104666105249102887
3020410324176600001001857810111061490111083938254033620210208971010020000400411547288430924910036310527810474810030669992630100811985102002000020200400001051323561110201100990100100001001000001002000033302064310000094723020310598003401117222622422997163119014141402000010100102351103691103670103329103527
30204104200785000110020900100110496600118607925410962040420395101002000040304664660874039549101309101645101727100235898635301009531049102002000020506400001014805151110201100990100100001001000001002000031322024410000010887297241123102900111722202252210278401971701402000010100104612104363104527104824104035

1000 unrolls and 10 iterations

Result (median cycles for code): 11.1682

retire uop (01)cycle (02)03090e0f191e1f22233a3f4346494f51schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)6067696a6d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)797bmap int uop (7c)map ldst uop (7d)map int uop inputs (7f)map ldst uop inputs (80)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)92inst branch cond (94)inst int load (95)inst int alu (97)inst ldst (9b)9d9fl1d tlb access (a0)l1d cache miss st (a2)l1d cache miss ld (a3)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)acafbbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)c2branch cond mispred nonspec (c5)cfd1d5map dispatch bubble (d6)ddfetch restart (de)e0e7? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
30025111761836111023690100111169711311920552544733252592000610010200005465787532340811150491086741116081116891072083107950300104241100202000020020400001117304741110021109278071010000101000001020000312824012100010152843510414055030310064024216221114020272491062000010010111635111767111891111545111628
30024111794838000022159100011155821312919802546355269342009210010200005484674533359511142491085421117581116461074483107752300101013100732010720020400001117615101110021109258221010000101000001020000272924436100011133453290311941126270064021216221113334244441002000010010111351111283111565111665111615
300241115868340000241411000111756400919642545897244792000510010200005501808533729601018491086471115401115521068683107971300102639100202000020020400001116605081110021109257711010000101000001020000312722953100010133063420513470129310064024216221114028258371062000010010111528111655111757111651111452
3002411151083700002511310011116354121591666254720526211200151001020000546389053314490998981084071116691116441074763108037300101291002020000200204022211157135411100211092810210100001010000010200003102219410001013679333891524403000064024216221115142241441062000010010111757111580111692111688111725
300241117938380000233420000111767414091791254694825170200031001020000549256453245870997491086031114511114841072693107842300102837100202000020020400001116025351110021109266081010000101000001020000312723202100000128063308812528028310064026216221113951258471062000010010111734111599111524111869111562
3002411156183500002237810011118160141491560254481125292200831001020000550147953351700113949108120111605111606107472310791030010382310020200002002040000111590877111002110928866101000010100000102000031282241910000014546335711334502331006400216221112391257081002000010010111696111559111431111399111743
3002411162583500002327010011118460121291720254558124962200041001020000550539753243160104949108828111680111829107391310814730010343110073200002002040000111526504111002210925018101000010100000102000031282352110001013582343381367413031006400216221114940235471062000010010111886111876112057111664111611
30024111834837001025370100111145001309158825439662428320004100102000054676695323490099549108628111407111580107348310809330010243210020200002002040000111675468111002110930032101000010100000102000031372397010000013498334021288610310064021216221114073245791062000010010111737111494111762111439111829
300241115868360110247411101111109414091612254451823733200211001020000545987553176370115249108674111916111826107114141079943001017191002020000200204000011158055511100211092050810100001010000110200003133243761000101523533004132421290006402021622111225625234002000010010111727111663111679111818111709
3002411169283601002551400001115303141491718254641827337200061001020000546381853270750977491085011117911115621075703107807300104125100202000020020400001115944661110021109261681010000101000001020000027217721000101405933509136451000064027216221114050258096102000010010112053111868111172111296111959