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, 4S)

Test 1: uops

Code:

  ld1 { v0.4s, v1.4s, v2.4s }, [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: 4.000

Integer unit issues: 1.000

Load/store unit issues: 3.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)0e0f18191e1f2223243a3f43464951schedule 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)5e5f6061696b6d6emap 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)d8d9dadbddfetch restart (de)e0? int output thing (e9)eaebec? ldst retires (ed)? int retires (ef)f5f6f7f8fd
6300529410237204011100001301004688288901212419240041000300010003000500015000015001615402885929358910400030004000292412930811610011000100003003693004002113004511093001318394636947315805320791032723800165557285861000160481337615073300010002948629338293402940529382
63004293232340011021110029000046212895213324135400010003000100030005000150000100016177028778293389104000300040002915329254116100110001000030040930130001530045111123101305894136973317505720724033153808195150285031000164951336814949300010002931929485294022952529330
6300429435237011013100001300004706289550332422940001000300010003000500015000070816148028746294303104000300040002924629441116100110001000030055630040005300451160201317094716942318504720788032823811365850286001000162291355015068300010002956529518295512937729576
63004293652360110021000114200004571294770012411940001000300310003003500015146091816240028864293528104000300340002926729323216100110001000030093630130038300151463001332495886969313105220831033323812144253287951000163541344515098300010002934429457295142942529421
6300429449238012003000101388000467428895000241544000100030001000300050051500000001617002865029418349400030004004293172932311610011000100003003593007103530045146337601311192116973316204420663032063817225451286801000163911354815000300010002944329472294592946929353
6300429274237000015011101440000470128957000242134000100030001000300050001500000001614602877029381310400030004004292012918221610011000100003009063007001403300151763601312392376947312204920573032673809155354284621000163841375915293300010002939429597293562931529424
6300429362236012112101001000004551288990002432340001000300010003000500015002000016172028680293223104000300040002923129222116100110001000030044930070028300451483001306493346980309104420669032203817135247284571000162821344314879300010002943129377293042945529316
63004293342370131140010017000046972894400024288400010003000100030005000150000000161770287012933931040003000400029202291591161001100010000300449300700010300351160001317294366953315505320737032773812175451285841000163831347115049300010002946729439294122935129406
630042957823500200310000100000469229001000242384000100030001000300050001500004001614402868729396310400030004000292852926011610011000100003000063001200130045116001451306892536999315215720834032303813135148287091000154091331814909300010002985529112292812911929007
63004291622370150020110042000145912905800024184400010003000100030005000150040200161540286822941831040003000400029206294361161001100010000300009300100010300151160001336492946935316405020879032893816145051285941000164201332015041300010002951229278295792935629249

Test 2: throughput

Count: 8

Code:

  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [x6], x8
  ld1 { v0.4s, v1.4s, v2.4s }, [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.0008

retire uop (01)cycle (02)03mmu table walk data (08)09l2 tlb miss data (0b)0e0f18191e1f223a3f4346494f51schedule uop (52)schedule int uop (53)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)67696d6emap 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)92inst branch cond (94)inst int load (95)inst int alu (97)inst simd load (98)inst ldst (9b)9d9fl1d 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)cdcfd0d5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
2402058006764310000004501280052261710154320102801022400008010502400156226153491083080049800718006949992650028320118200240024200320288800458006411802011009901000100800008000011002400000440240040000452400395140440111511601251080062800031410240000801008006980066804028006680071
240204800696420000010247002800482661925320100802322401308010002400006233903491311080048804068024349991350022320591200240000200320000800688006511802011009901000100800008000001002400000440240040040432400416140440000511002161180069800731118240000801008007680061802358023880069
2402048006564300100004500280055261142253201008010024000080161024017866212635025720800468007180069499882450023320100200240000200320000800688006111802011009911000100800008000001002400000430240040030502401715140440000512501161180365800001414240000801008007080396800718006380241
240204800716430000001490028005126222253203078010024000080100024000064639435070640800458006580238501061250031320100200240000200320000800658006511802011009901000100800008000001002401320430240042010412400415140440000512401251180069800001410240000801008006680066800688006380252
240204800656430100001610028005226613525320868801002400008010002400006756113515139080040800698006649996350317320363200240000200320000800658006011802011009901000100800008000001002400000440240042010432400406140440000511001161180065800001314240000801008006580065800718006780070
24020480068643000000058002800532662025320100801002400008010002400006230523515559080051802388007449994350022320100200240000200320000800688022111802011009901000100800008000001002400000430240041010152400415140440000511001161180066800001510240000801008006980239800668006580068
240204800656430000000580028005926615125320100801002400008010002400006487123522358080040800698006549987350024320100200240000200320257800698006911802011009901000100800008000001002400000430240041050412400405141440000511001161180062800001410240000801008006780066800668006380075
24020480234643000000051001800532669125320100801002400008010002400005955913502449080043804048006849988350032320100200240000200320256800658006611802011009911000100800008000001002400000430240040020432400416140440000511001161180066800001414240000801008006980067800668006380072
24020480066644000000052001800452662025320291801612400008010002400006707723519319080078800708007249989350023320100200240000200320256802338021811802011009901000100800008000001002400000430240041030492400415140440000511001161180062800621410240000801008006980066800668041880069
240204802396420010000490028005321763025320100801002400008010002400005967853528195080189802228006849987350031320100200240000200320000800738007111802021009901000100800008000001002400000430240041010412400415140440000511001161180063800001410240000801008006780074802428041280072

1000 unrolls and 10 iterations

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

retire uop (01)cycle (02)03l2 tlb miss data (0b)0e18191e1f2223243a3f4346494f51schedule 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)6067696d6emap 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)a5ld unit uop (a6)l1d cache writeback (a8)a9acafb5b6bbl1d cache miss ld nonspec (bf)branch cond mispred nonspec (c5)cfd5map dispatch bubble (d6)d9ddfetch restart (de)e0e7? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
24002580059643000045010028004621717172532001080010240000800102400006765393549807008004080069800645000635003532001020240000203200008006080055118002110910108000080000010240000036024004200402400405133430502021601280057080000106240000800108008780062800468004680061
24002480066643000058010028005021117182532001080010240000800102400006755473487120008003580065800605000635003532001020240000203200008006280055118002110910108000080000010240000036024000000402400335133440502221602180061080000116240000800108006180066800638006180062
24002480060643000045010038004021717192532001080010240000800102400006108493507089008003880060800605000635003532001020240000203200008006080060118002110910108000080000010240000035024004000402400405133440502021601180061080000106240000800108006180062800658006180062
240024800616430000570100380045017141625320010800102400008001024000063673735007430080040800628006050006350035320010202400002032000080060800551180021109101080000800000102400000360240040103624004051374305020116012800570800001011240000800108006180062800658006180062
2400248006064300005701003800452171712532001080010240000800102400006755473487120008003580060800605000735032832001020240000203200008006080055118002110910108000080000010240000036024004000402400405133430502011602180062080000610240000800108006180061800678006180061
24002480061643000045010038004621717152532001080010240000800102400006648793487120008003580060800555001035004032001020240000203200008006080060118002110910108000080000010240000039024003900332400395133360502211601180061080000106240000800108006380060800618006180061
24002480060643000045000138004921717162532001080010240000800102400006447383519409008003080060800615000635034732001020240000203200008006180058118002110910108000080000010240000036024004000402400415140430502221602180057080000106240000800108006280066800628006180066
240024800636430000460000280046314171625320010800102400008001024000064473834976400080035800618006450006350035320010202400002032000080061800551180021109101080000800001102400000360240040003324004150344305020116021800570800001010240000800108006580062800568006280062
240024800626430000460001380046217171325320010800102400008001024000064473835070890080035800608006450006350040320010202400002032000080045800541180021109101080000800000102400000360240039003324003951334405020116021800580800001010240000800108006280061800638006380062
2400248005464300003800011800492171716253200108001024000080010240000676539350708900800358006080065500053500683200102024022020320000800498005511800211091010800008000001024000003602400400039240040510430502011601180052080000126240000800108006280061800618005680062