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

ST1 (multiple, 3 regs, 8B)

Test 1: uops

Code:

  st1 { v0.8b, v1.8b, v2.8b }, [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
  mov x0, 0

(no loop instructions)

1000 unrolls and 1 iteration

Retires (minus 60 nops): 3.000

Issues: 3.000

Integer unit issues: 0.000

Load/store unit issues: 2.000

SIMD/FP unit issues: 1.000

retire uop (01)cycle (02)03l1i tlb fill (04)mmu table walk instruction (07)mmu table walk data (08)l2 tlb miss instruction (0a)l2 tlb miss data (0b)18191e1f22233a3f464951schedule uop (52)schedule simd uop (54)schedule ldst uop (55)dispatch simd uop (57)dispatch ldst uop (58)simd uops in schedulers (5a)ldst uops in schedulers (5b)5f696d6emap rewind (75)map stall (76)dispatch uop (78)map ldst uop (7d)map simd uop (7e)map ldst uop inputs (80)map simd uop inputs (81)8283flush restart other nonspec (84)85inst all (8c)inst simd store (99)inst ldst (9b)l1d tlb access (a0)l1d cache miss st (a2)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafl1d cache miss st nonspec (c0)c2c9cfd0d2l1i cache miss demand (d3)l1i tlb miss demand (d4)d5map dispatch bubble (d6)d9dadbddfetch restart (de)e0eaebec? ldst retires (ed)? simd retires (ee)f5f6f7f8fd
63006288732240201000010048492860600179183000100020001000200015905800072171528425286373103000200010004000200028888287981161001100010002000602000000200000013152954669253154044203293148381843303628473158271292214625200010002904228910289942895728979
63004289742250201000010046622872330180003000100020001000200015903800092169528667289553103000200010004000200028796290691161001100010002000602000000200060013246965769403208142203083241381644394428428158601292914336200010002894729102290442901529098
63004288962240200000011046892873330178943000100020001000200015902800062169228737290673103000200010004000200028940289621161001100010002000402000000200040013210949769793155038202923193381348354028478157871288914428200010002907729137292482908429038
6300429224227020111213288004622287262018062300610012002100220021599180086217182870029058829300020021000400420022893529351816100110001000200040200004786200204013159942669293092043204823215381446413728545157321322514753200010002916329087291042916829204
63004291382260111132537352004614289640018194300310002000100020001590580006216882877629179310300020001000400020002893929047116100110001000200003200000020004056713043965468773184035205053254381940384328742156821291514716200010002973229627294662969829626
63004295312300203000000044332920700185593000100020001000200015904800032172129104295713103000200010004000200029440295081161001100010002000402000100200040012790901968642994133209193109381837424028607168301388815401200010002949329532295812949929543
63004295852300202000010046302924400185833000100020001000200015908800032175429183296493103000200010004000200029499294851161001100010002000002000000200040218012758921068203043034208683291381735384328671165631366015522200010002963229661296682952629483
63004295922210202000000045492921320185493000100020001000200015902800032172429041295603103000200010004000200029454294851161001100010002000602000000200040012881888468103038032208533132381539403728666167611385715413200010002959729664295672957629577
63004295502210201000010045612916200185213000100020001000200015906800042172629147295883103000200010004000200029483294451161001100010002000002000000200040012975918168123073134208973097381539353428663167781371815448200010002954929510294862952429549
63004295512210202000000045302922200185873000100020001000200015906800072168329135295093103000200010004000200029419294161161001100010002000002000200200000012827910968433014129208243103381744343828614167151378615491200010002952429488295492959429496

Test 2: throughput

Count: 8

Code:

  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  st1 { v0.8b, v1.8b, v2.8b }, [x6]
  mov x7, x6
  mov x8, x6
  mov x9, x6
  mov x10, x6
  mov x11, x6
  mov x12, x6
  mov x13, x6

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code divided by count): 1.0007

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk data (08)l2 tlb miss data (0b)18191e1f23373a3f46494f51schedule uop (52)schedule int uop (53)schedule simd uop (54)schedule ldst uop (55)dispatch int uop (56)dispatch simd uop (57)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)ldst uops in schedulers (5b)696d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map ldst uop (7d)map simd uop (7e)map int uop inputs (7f)map ldst uop inputs (80)map simd uop inputs (81)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst branch cond (94)inst int alu (97)inst simd store (99)inst ldst (9b)9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss st (a2)a4ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafbcl1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)c2cfd5map dispatch bubble (d6)daddfetch restart (de)e0? int output thing (e9)ea? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
24020680064621110435944030328180557160525240241100800471600001008000016000050036799676420828003080054800534996035001224010020016000080000200320000160000800638006411802011009910010080000800001001600151444011600160118160002164414251102162228004900160000800001008005580064800548005580053
2402048006462110100017042180040161612524013710080006160000100800001600005003680039640099800278005480054499603500122401002001600008000020032000016000080052800521180201100991001008000080000100160014140001600160016160002164414051102162238005100160000800001008005380055800558005280055
240204800546211000002001030180039160125240111100805561600001008000016000050036800396401838003080053800524996735001024010020016000080000200320000160000800548005411802011009910010080000800001001600141544001600160016160002164414151102160328005100160000800001008006480053800558006580055
24020480052620100000140551800391616525240142100800421600001008000016000050036800636400828003980055800554996035001224010020016000080000200320000160000800478006311802011009910010080000800001001600151444011600161114160002164414051102160218005100160000800001008004880055800558005380055
2402048005462010100018110371800401516625240760100808151600001008000016000056536952776407768003180054800544996535000524010020016000080000200320000160000800478005411802011009910010080000800001001600141444011600161114160002164414051103160218006000160000800001008005580048800548005580064
24020480054621100000180361800381616325241187100800401600001008000016000050036799666401698002780063800524996735001224010020016000080000200320000160000800518005211802011009910010080000800001001600141444011600160017160002164414051103160228004900160000800001008005580053800558005580048
240204800636211000012170361800481616625240919100806791600001008000016000050036804726426228002880063800644996735001324010020016000080000200320000160000800528005211802011009910010080000800001001600141544011600160016160002164614051103160218004800160000800001008005580053800558005580048
24020480052621110000201905180040161622524110910080029160000100800001600005003680037641029800298004380043499533500012401002001600008000020032000016000080043800401180201100991001008000080000100160000042001600000051600022420051103160228004000160000800001008004180041800448004480044
2402048004062100000030370800251616125240113100800281600001008000016000050036795086401398001880040800404995635000124010020016000080000200320000160000800438004311802011009910010080000800001001600000000160002006160000200051102160218004000160000800001008004480041800418004180044
240204800476200000000026080028161612524012810080037160000100800591600005003679388640147800188004380043499533500012401002001600008000020032000016000080043800431180201100991001008000080000100160000042001600000031600022420051103160118004000160000800001008004480044800448004180044

1000 unrolls and 10 iterations

Result (median cycles for code divided by count): 1.0007

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk instruction (07)mmu table walk data (08)l2 tlb miss instruction (0a)l2 tlb miss data (0b)18191e1f2223373a3f46494f51schedule uop (52)schedule int uop (53)schedule simd uop (54)schedule ldst uop (55)dispatch int uop (56)dispatch simd uop (57)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)ldst uops in schedulers (5b)60696b6d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map ldst uop (7d)map simd uop (7e)map int uop inputs (7f)map ldst uop inputs (80)map simd uop inputs (81)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst branch cond (94)inst int alu (97)inst simd store (99)inst ldst (9b)9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss st (a2)a4ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafbcl1d cache miss st nonspec (c0)l1d tlb miss nonspec (c1)c2branch cond mispred nonspec (c5)branch mispred nonspec (cb)cfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
24002680053621101000001600120428004800025240011108051316000010800001600005036804726421180800290800548005349999350044240010201600008000020320000160000800548005411800211091010800008000010160014154401160016011716000216441400050201161180051016000080000108512484964824038139880053
2400248005262110101001220006602800371616225240879108102316000010800001600006036805416447710800270800558005449989350044240010201600008000020320000160000800548005411800211091010800008000010160014144402160016001916000216441400050221162180051216000080000108005480055800648005580064
2400248005262111000000190021800391616225241047108107316000010800001600005036801096400180800270800528005249989350032240010201600008000020320000160000800638006411800211091010800008000010160014144401160016111816000216441410050202161280051016000080000108005580053800558005580055
24002480053621100010013214001346280040151610825240735108087216000010800001600005036800396411870800390800568005449989350034240010201601228000020320000160000800548005411800211091010800008000010160015144300160016011616000216441400050222161180052016000080000108006480055800558005380055
2400248005462110101000190062800391616225240438108083716000010800001600005036800616400120801800800528005249989350032240010201600008000020320246160000800638005211800211091010800008000010160014144400160016211616000216481400050201161180051016000080000108005580053802228005380055
24002480054620111110012170014211800371616025240011108090816000010800591600005036801576409450800260800648022949982350032240010201600008000020320000160000800548005411800211091010800008000010160015154400160016111616000216441400050201162180051016000080000108005580054800558005580055
24002480053620102000002210528003916161252400141080404160000108000016000050368006364001808002908005480054499863500342400102016000080000203200001600008005480054118002110910108000080000101600151444630160016021616000216441400050372163180206016000080000108022380048800558005380224
24002480398621100122039610700122802071616111462405421080418160120108011816010855369966964136608033808038180397502298503032401772016012280124203207681601228022380405218002110910108000080000101610971444969016007600284216012216441400050372342180357116000080000108022380221803918022880226
240024803846221120220121700818003716012524069210800031600001080000160000503679941640023080029080054800544998935002724001020160000800002032000016000080054800541180021109101080000800001016001514420116001600231600021601400050201161180049016000080000108004880055800558005380055
240024800546201110000019006851800391615025240012108072816000010800001600005036799666400100800270800548005449982350034240010201600008000020320000160000800528006411800211091010800008000010160015144402160016101816000216441400050222162280051016000080000108006480054800558005380048