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

LD1 (multiple, post-index, 3 regs, 8B)

Test 1: uops

Code:

  ld1 { v0.8b, v1.8b, v2.8b }, [x6], x8
  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, 1
  mov x1, 2
  mov x8, 0

(no loop instructions)

1000 unrolls and 1 iteration

Retires (minus 60 nops): 3.000

Issues: 3.000

Integer unit issues: 1.000

Load/store unit issues: 2.000

SIMD/FP unit issues: 0.000

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)0e0f18191e1f22243a3f43464951schedule 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)5f696d6emap rewind (75)map stall (76)dispatch uop (78)map ldst uop (7d)map ldst uop inputs (80)8283flush restart other nonspec (84)85inst all (8c)inst simd load (98)inst ldst (9b)9dl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss ld (a3)ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafb5b6bbl1d cache miss ld nonspec (bf)l1d tlb miss nonspec (c1)c2c9cfd0d2l1i 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)? simd retires (ee)? int retires (ef)f5f6f7f8fd
63005292892270180900100001046202882812224188300010002000100020005000100004161182862529349310300030003000292492913011610011000100012000062006001220026040210132359288698330977372067031473813434422853310001608513635147182000100010002935429286292872924229292
630042932422711511111100200046422876600024158300010002000100020005000100028162162866229130310300030003000290762908611610011000100012000062003000720024046000129409167689530878372060031583815840382842110001603713531150082000100010002922829247292792927029242
630042922722611501400000143010464328888000241353000100020001000200050001000091624328542291943103000300030002898829133116100110001000020000620020002200260260001291993166970313763620612320938081038372840510001617113440151752000100010002920929224291592923329260
6300429314227113010000041360004570287580022414830001000200010002000500010000916135286012917772730003000300029164290221161001100010000200006200200040220020036000129199414693330667342064332663808639342851110001648813819150162000100010002914429148292202925529246
63004293582270140150110028800469528823000240373000100020001001200050001000051625628542292833103000300030002914928966116100110001000020000620030005200340260001300696426907319553620588316438181035352845610001610713485149142000100010002928929276292482921329222
630042922822701401300000501046282874900024196300010002000100020005000100000162582862429178310300030003000292222921911610011000100002003042000000020000006000132889585685331146362064932663810933372834410001627213606149342000100010002910629172293222927529184
630042929222701711800010200046032882400024086300010002000100020005000100001162722859329250310300030003000291322908711610011000100002003202000001020000004200129929471694330868412061431833821837372844710001601213669146312000100010002935729215291162930329305
630042933822601901600000500046562886500124107300010002000100020005000100009161812866529244310300030003000291202909511610011000100002000462000000320000004200131459505688231246352062232363814836382849910001642013671146982000100010002926729254292632920729386
630042927722801901000000200147792875300024205300010002000100020005000100004161702861929299310300030003000290432919311610011000100002000042000000020004024010130489257693630906312055132713817732352838510001630113507152042000100010003007029971296482951729335
630042924922701001210000800045202881600024172300010002000100020005000100005161682859329393310300030003000291692922311610011000100002000202000000020004024000130359278691532104312067431783818933342847110001602413372146722000100010002919929197293902926929158

Test 2: throughput

Count: 8

Code:

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

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

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

retire uop (01)cycle (02)03mmu table walk instruction (07)mmu table walk data (08)l2 tlb miss instruction (0a)l2 tlb miss data (0b)0e0f18191e1f22243a3f4346494f51schedule 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)606167696d6emap 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 alu (97)inst simd load (98)inst ldst (9b)9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss ld (a3)a5ld unit uop (a6)st unit uop (a7)l1d cache writeback (a8)a9acafb5b6bbl1d cache miss ld nonspec (bf)c2branch cond mispred nonspec (c5)branch mispred nonspec (cb)cdcfd2d5map dispatch bubble (d6)ddfetch restart (de)e0e7? int output thing (e9)eaeb? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
240205819666341110001217088001818622121254562402948016616024580199160166206307436749180008021180162802805001321501552403742002402802022402808016080286218020110099100100800008000010016011802701600320850121701616376123350000512501342280138080134101016000080000801008004180164801898016480165
2402048028362100010013293880018002520124462401008010016000080100160000202423036759951008001580040800404995334999824010020024000020024000080040800401180201100991001008000080000100160000027016003201402316003261035000051100116118003718000010616000080000801008004180041800418004180041
240204800406210000000037000180025201212252401008010016000080100160000204678736461011008011480040800404995334999924010020024000020024000080040800401180201100991001008000080000100160000027016000007802316000061000000511001161180037080000101016000080000801008004180041800418004180041
2402048004062100000000420001800252121215252401008010016000080100160000206497136793521008001580041800404995434999824010020024000020024000080040800401180201100991001008000080000100160000027016000009405616002461035000051100116118003708000011616000080000801008004180041800418004180045
240204800406210000010012500018002521212112524012580100160000801001600002043614367723010080015800408004049954349999240100200240000200240000800408004011802011009910010080000800001001600000330160000083027160000613235000051100116118003718000010616000080000801008004180041800418004180041
24020480040621000000004100008002521212112524010080100160000801001600002053465367599510080015800408004049953349998240100200240000200240000800408004011802011009910010080000800001001600000270160031087027160024610350000511001161180037080000101016000080000801008004280041800418004180041
2402048004063600000000500000800252121202524010080100160000801001600002043332367266410080015800408004049953349998240100200240000200240000800408004011802011009910010080000800001001600000270160024048032160024612335000051100116118003708000010616000080000801008004180041800418004180041
240204800406200000000012700018002521212112524010080100160000801001600002054994367132810080015800408004049953349998240100200240000200240000800408004011802011009910010080000800001001600000350160032056023160032612435000051100116118003718000010016000080000801008004280041800418004180042
240204800406200000000062000080025212024252401008010016000080100160000205350636793511008001580040800404995434999824010020024000020024000080040800401180201100991001008000080000100160000000160032000371600006124350000511001161180037180000101016000080000801008004180041800418004180042
24020480040620000000003700118002521212112524010080100160000801001600002044958364610100080015800408004049953349998240361200240000200240000800408004011802011009910010080000800001001600000358160000000381600246132350000511001162180037080000101016000080000801008004180041800418004180170

1000 unrolls and 10 iterations

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

retire uop (01)cycle (02)03mmu 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)696d6emap 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 alu (97)inst simd load (98)inst ldst (9b)9d9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache miss ld (a3)ld unit uop (a6)l1d cache writeback (a8)a9acafb5b6bbl1d cache miss ld nonspec (bf)c2branch mispred nonspec (cb)cdcfd5map dispatch bubble (d6)d9ddfetch restart (de)e0e7? int output thing (e9)eaeb? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
2400258004062000010004200000800272000252400108001016000080010160000204584336793528001680041800404997535002024001020240000202400008004080040118002110910108000080000010160000035160036003116003661324000050201160118003708000014016000080000800108004180041800418004180041
2400248004062000000005901002800250121242524001080010160000800101600002069658367935280015800408004049976350020240010202400002024000080040800401180021109101080000800000101600000016000000311600360004000050201160118003708000001016000080000800108004180041800418004180041
2400248004062100000004201000800252121216252400108001016000080010160000204523136705228001980040800404997535002124001020240000202400008004080040118002110910108000080000010160000035160036003616000061334000050201160118003708000001016000080000800108004180041800418004180041
240024800406200000000380000280025212020252400108001016000080010160000205923136726658001580040800404997635002024001020240000202400008004080040118002110910108000080000010160000035160036003616003601035000502011601180037080000141416000080000800108004180041800418004180041
2400248004062000000004200002800252121216252400108001016000080010160000205016736693418001580040800404997635002024001020240000202400008004080040118002110910108000080000010160000001600361039160036013635000502011501180037080000141016000080000800108004280041800418004180041
2400248004162000000004201000800252121216252400108001016000080010160000205337336726858041480040800404997535002024001020240000202400008004180040118002110910108000080000010160000035160036403616003661324000050201150118003708000001416000080000800108004180041800418004180041
240024800406200000000540000280025212121125240010800101600008001016000020592313679352800158004080040499753500202400102024000020240000800408004011800211091010800008000001016000003516003100361600396104000050201160118003708000014016000080000800108004180041800418004180041
24002480040620000100012000028002521201625240010800101600008001016000020696583673070800178004080040499763500202400102024000020240000800408004011800211091010800008000011016000000160000003216000061324000050201160118003708000001016000080000800108004180041800418004180041
240024800406200000000540000080025201202524001080010160000800101600002045231366930980024800408004049975350020240010202400002024000080040800401180021109101080000800000101600000401600360039160036613640000502011501180037080000141516000080000800108004180041800418004180041
240024800406200000000420000280025212120252400108001016000080010160000205702836755168001580040800404997635002124001020240000202400008004080040118002110910108000080000010160000035160000003616003660320000502011601180037080000141416000080000800108004180041800418004180041