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

STEORLH

Test 1: uops

Code:

  steorlh 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.005

Integer unit issues: 1.005

Load/store unit issues: 2.000

SIMD/FP unit issues: 0.000

retire uop (01)cycle (02)03l1i tlb fill (04)l1d tlb fill (05)mmu table walk instruction (07)mmu table walk data (08)09l2 tlb miss instruction (0a)l2 tlb miss data (0b)0e0f191e1f22243a3f4651schedule 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)5f6061696a6d6emap 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 tlb miss (a1)l1d cache miss st (a2)l1d cache miss ld (a3)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafbbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)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
73006343022565020000000103800054653406602204430051005200010002000110711689880049310563384734098310300010002000200040003401226751171001100010000200442010071001017200551232314901108271799136531822419836234455155757329941008190301670317460200010003405234154340813416834129
73004341332558101111003115311053163390002210430101006200010002000112711693270649309583373634087310300010002000200040003401626881171001100010000200002310041000004200570222114869106562804736741642429435644446206063330051007191211687617675200010003417834100339643410634192
73004341092565111111000100501052453397502202230051006200010002000110231696330049309313366434167310300010002000200040003408326701171001100010001200342210081001017200651220014859104531800235370512403435084451135759331921005192701696817536200010003424134144342803406334214
73004340352566000000000101111053003395602212430061008200010002000111171693640049309403375834207310300010002000200040003401826771171001100010000200002210041000005200440222214892104561799735733632413335154460186759330971006191831675217461200010003415034269341123411034106
73004340692556101100000129411053423391102214230061007200010002000110391693590049310703363634069310300010002000200040003405126741171001100010000200342210091001027200451222214874105581805736792612415135274464206464330391007191521706417593200010003405934132340763411634072
73004341282558101101000100711052583394602205130061007200010002000110291691780049310543368134150310300010002000200240003407127091171001100010000200232210061001016200461222214903110282794935472642422635784460155060329821006190381683717779200010003418534058340283406834127
73004341092562101001000142311052723403902205930051005200010002000110021690030049311253372034110310300010002000200040003402226881171001100010000200000210041000003200540230014993106504799135532562413836144455137061330671006193661662417537200010003409534066341483413234101
73004341702555000010000102601052993395002201630081004200010002000111021700540049309643375234158310300010002000200040003405226981171001100010000200002210061000004200430220014972107302804235224542419636474456165855330091005189801675217781200010003405734087340833405334073
73004340952556000000000142600053903390702195730051006200010002000110051688240649311043370934101310300010002000200040003408626711171001100010000200002210071000004200430220015015105911803935090652414035214453176359331571004191041687017515200010003418134103341803413334057
73004341562566030010000102301052833401302207930051006200010002000110941690940049309773370134135310300010002000200040003400227081171001100010000200002210041000004200450222015019105321798035581592420935514451146564330691005189381683717844200010003418034219340783402534030

Test 2: throughput

Code:

  steorlh w0, [x6]
  add x6, x6, 2

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 7.0069

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk data (08)l2 tlb miss data (0b)0e0f181e1f202223293a3e3f404346494f51schedule 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)6067696a6b6d6emap 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
402067006952511000050612461001407004821111125897625403422032120000201002000020452683321265094496698907002970069645013650274010020200200003020040000700696111202011009910010000101001000001002003311103819872100611000211493037200381163612311113101161169850204469620000201007006470070700707007070064
40204700695241330005062261001407005422112657135254039320344200002010020000204470733204920235496698407002970069645013650214010020200200003020040000700696211202011009910010000101001000001002003015116341987010057100021331282420041020326901113101161169856203106620000201007006470070700647007070064
4020470069524100000504723710010167005421113125868525405152032420000201002000020447883320979014349669830700337006364507365027401002020020000302004000070050611120201100991001000010100100000100200182733719870100531000213191820200350162261631013101161169837203439620000201007007070070700707007070064
402047006952512100050442281001007005425111115855425403202038220000201002000020469813319903019449669830700297006964501365021401002020020000302004000070063611120201100991001000010100100000100200441126331987010044100022130182520054013227881113101161169850202156620000201007007070064700647007070064
40204700695251100005025213100100700542019105758125404002037220000201002000020455083321558051496699107002370069645073650274010020200200003020040000700636111202011009910010000101001000001002003013116321987210024100050021162720026012223701113101161169856204689620000201007006470123700707006470070
40204700695241000005034217100707004817199585272540503204572000020100200002045097332157708249669890700277006964501365026401002020020000302004000070063611120201100991001000010100100000100200163692819872100611000211122419200460133351421013101161169856202929620000201007006470070700707006470070
4020470063524111000504922010013070054171911588132540423203492000020100200002045294332158001144966989070029700696449836502740100202002000030200400007006361112020110099100100001010010000010020019190351987210045100022233222920039193201061113101161169850203629620000201007006470070700707007070070
40204700695251010005041228000807005419012115878525406092021920000201002000020448923321518012449669890700237006964502365027401002020020000302004000070069611120201100991001000010100100000100200212702919872100331000212241227200360132301101213101161169850202356620000201007006470070700707007070070
40204700695241111005028232100120700541218145777825403752034120000201002000020455783321833015749669890700237006964507365021401002020020000302004000070063611120201100991001000010100100000100200283873519872100451000202282418200400172321061113101161169856202199620000201007007070070700647007070070
402047006952511100050402311001412700542319125795525403522027120000201002000020451723321861020949669890700297006364501365027401002020020000302004000070069611120201100991001000010100100000100200272105461987210041100023123163220043113224691013101161169856202636620000201007007070064700647007070070

1000 unrolls and 10 iterations

Result (median cycles for code): 7.0069

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk instruction (07)mmu table walk data (08)09l2 tlb miss data (0b)0e0f181e1f202223293a3e3f404346494f51schedule 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)6067696a6b6d6emap 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)c2cdcfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
400287006954320202020505382910012070054234914586292540265203562000020010200002043953332147901424966989070029700696452936504940010200202000030020400007006965112002110910100001001010000010200481678501987210069100073144305020049119940112141012702162269856202379920000200107007070070700707007070070
4002470069524100030005073820200110700544341011569252540300202782000020010200002044270332127702334966989070029700696452936503640010200202000030020400007005665112002110910100001001010000010200411411552198721006010011214705020058132816132141012702162269856203479920000200107007070057700707007070057
400247006952410100000505282800000700540410185734525403692027520000200102000020454233321110018449669890700297006964529365036400102002020000300204000070056671120021109101000010010100000102003214186331987010058100112137465020046132941169140012702162269856203359920000200107005770070700707007070070
4002470069525101010005067819100160700412341055748525404672047820000200102000020442523320569015149669760700297006964516365049400102002020000300204000070069641120021109101000010010100000102003614134401987010064100081224185120045118832240143012702162269856203019920000200107007070057700707007070070
400247006952410001000509092510090700541746958805254024520352200002001020000204382733215110223496698907002970069645163650494001020020200003002040000700695811200211091010000100101000001020040159420198701006710008132418522003203083796140012702162269856202669920000200107007070057700707007070070
4002470056525101010005055832100707005423477582172540394203732000020010201382044112332020919049669890700407006964529365049400102002020000300204000070056671120021109101000010010100000102003425148561987010058100171135305420034132943132141012702162269843203999920000200107007070070700707007070070
40024700695251000000050617251001407005425411105771525402852035220000200102000020446313321589016649669763700297006964516365049400102002020000300204000070069591120021109101000010010100000102004413142431987210077100081242185420039135838187141012703162269856202639020000200107007070070700707007070070
40024700695251010100050659251001007005423491257868254036420343200002001020000204443033217570284496698907002970069645293650494001020020200003002040000700696511200211091010000100101000001020042257930198721005010007112518492007813681696142012703162269856205949920000200107005770070700707007070070
40024700695251000000250507311001407005428310125787225406212043220000200102000020442483321251025749669890700297006964529365049400102002020000300204000070069651120021109101000010010100000102003613127461987010053100080024304320062132837163132012702162269856203900920000200107007070070700707005770070
4002470056525100010005053819100160700412348125804725402262015220000200102000020437023321498010249669890700297006964529365049400102002020000300204000070069671120021109101000010010100000102003114186821987210057100081024224520047218844114141012702162269856204019920000200107005770070700707007070070

Test 3: throughput

Code:

  steorlh w0, [x6]
  mov x7, 8

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 22.0138

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk data (08)09l2 tlb miss data (0b)0e0f18191e1f2223243a3f4346494f51schedule 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)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)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafbbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)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
3020522019816491121110027252150001220150691420203225508102682123651101002000082527331052424915174921706222011722014721550162163273010017811720102032000520206400092201728691110201100991001000010010000010020024212935272241001631173143743717475152133202111716112130160021935713127471131302000010100220150220145220133220175220189
3020422014216491101000027258150001220137713132020592550803279602319010100200008508929105238680562492170782201542201202154466216370301002035185610203200052020640009220138787111020110099100100001001000011002002323340269951001501169203686517165142131210111716102290160021942221827218131302000010100220149220155220152220103220137
302042201461649110000002729614100022013780112022592550744275562347710100200008406133105245230512492170412201542201222154736216376301001857200210203200052020640009220121897111020110099100100001001000001002002425283527158100140217255372461775415031210111716104810160021940619827602131302000010100220145220157220153220145220159
302042201041649100100002717215100122012169020200825502912653323076101002000083707441052709204539821705922015422014421547962163303010024851928102032000520206400092201259141110201100991001000010010000010020020203135275341001701171283693117055142032220111716101790160021944618227813131302000010100220133220127220149220157220151
30204220122164911020000278631500012201217111020183025508292800023150101002000084374201052387104744921708422013022013421543162163403010021592172102032000520206400092201608911110201100991001000010010000010020023220342661910014001668836767173281621342511117169570016002195061622746613002000010100220116220155220139220125220137
3020522017816491101000027267141003220113714112026632550522268712372810100200008220956105249030498492170392201162201562154486216365301001991174610203200052020640009220150919111020110099100100001001000001002002225334027173100140216938369781759914213522111171611001016002194521852777913002000010100220129220154220131220177220147
3020422011216491001000026774150001220133901020189325510442792223000101002000083113491052608704794921704722014022012321547062163483010018152354102032000520206400092212599231110201100991001000010010000010020024233339268511004902177193749417798141831212111716102840160021941414427203131302000010100220115220154220154220216220125
3020422013216491101000027431140002220113613112024072550704272132324410100200008225981105245980522492170422201582201322154426216346301001669198210203200052020640009220138913111020110099100100001001000001002002221040274561001601171793651217378141929191111716105980160021940211527639131302000010100220141220145220147220159220113
30204220120164911010000270151600012201250141220261725506742770923194101002000084330771052659915394921709622014622013621544662163343010020741851102032000520206400092201308911110201100991001000010010000010020022202933268561001500173033717017352142132211111716105880160021942816028100131312000010100220146220146220123220168220141
3020422016616491001100027346151002220135701120205625508172777623126101002000085386621052429405374921709222012022015621546662163403010018712069102032000520206400092201669181110201100991001000010010000010020024220462675710016011708237136175401524332311117169777016002193982232769801302000010100220129220176220137220135220135

1000 unrolls and 10 iterations

Result (median cycles for code): 22.0266

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk data (08)09l2 tlb miss data (0b)0e0f18191e1f2223243a3f4346494f51schedule 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)6067696a6b6d6emap 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 tlb miss (a1)l1d cache miss st (a2)l1d cache miss ld (a3)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafbbbcl1d cache miss ld nonspec (bf)l1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)c2branch cond mispred nonspec (c5)branch mispred nonspec (cb)cfd1d5map dispatch bubble (d6)ddfetch restart (de)e0e7? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
30025220109164910011000319501410012201959171620087525529603291020077100102000010663503105265630125049217182022028122022121540132164713001014413110020200002002040000220210667111002110946804101000010100000102002626224031471100150221828415362153615260240006401520921522219361032871992000010010220269220312220191220323220298
3002422023416501101000031567161001220240001820123525529043280520066100102000010618483105260131134049217168022030222024221541032164803001017114710020200002002040000220231655111002110969362101000010100001102002325300316311001701216824162821510152924260006401526221622219397432800992000010010220289220272220231220255220296
3002422025016501100010031434160002220223718182014712552934328382006610010200001062187810526513113454921721602202342202262154263216493300101301161002020000200204000022023371511100211095316510100001010000010200272732031552100150021607415412156715290250006401523721622219364032831902000010010220269220326220229220269220237
30024220278165011010000315501610022202109170200924255294132913200511001020000106862721052200811267492171560220246220226215277321645330010152129100202000020020400002202297121110021109597351010000101000001020025270031624100160121673416222156315290251006401540021622219272032880902000010010220266220223220239220208220263
300242202201649110100003172616100222022191718200943255294132885201421001020000106979601052510011364492170910220225220220215361321645630010119110100202000020020400002202257201110021109676121010000101000011020027263341315551001600216224158621515152625251006401535321522219361132859902000010010220261220295220273220273220241
3002422018816501001000031546150000220264918172012872552958328492007410010200001066493810526893114164921723002202522202792153873216505300101331311002020000200204000022028073611100211094808310100001010000010200232424031574100170121602416082156816031231006401522421622219445732763902000010010220226220206220255220237220270
300242202521650100100003156614000222021970142012502552973327512014710010200001062673010528387113264921717902202392203062154363216525300101271261002020000200204000022023566911100211095413910100001010000010200272600315551001600215284154821539152933260006401547621522219423432797092000010010220250220226220231220277220257
3002422026616501001000031654161002220232817182009542552979328742010910010200001063666610522960114064921715802202362202662153363216502300101601301002020000200204000022028969811100211094817410100001010000010200262800315501001602215134152621645142522260006401529221522219334032848992000010010220253220238220311220210220211
3002422024616501000000031559141001220244901720143125528253284220062100102000010619057105249451138349217204022027822029021543632165323001013412510020200002002040000220270713111002110956829101000010100000102002726224231542100170221618415582158615023262006401538721622219391032810902000010010220309220298220259220266220281
300242202461650110101003149616100122022991717201360255284432773200581001020000106335911052631411373492171980220269220289215339321650130010111145100202000020020400002203266671110021109408421010000101000011020027263340314921001701214874141421440152823252006401515821622219365132740902000010010220269220272220241220263220243