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

Test 1: uops

Code:

  ld1 { v0.4h, v1.4h, v2.4h }, [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)03l1i tlb fill (04)mmu table walk instruction (07)l2 tlb miss instruction (0a)l2 tlb miss data (0b)0e0f181e1f2223243a3f464951schedule 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)5f60696d6emap 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)c2c9cfd0d2l1i cache miss demand (d3)l1i tlb miss demand (d4)d5map dispatch bubble (d6)d9dadbddfetch restart (de)dfe0? int output thing (e9)eaebec? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
63005296912373100110160100468929063002444930001000200010002000500010000411618028869294953103000300030002932329306116100110001000020000420000020200040040013287943869743192040207983397381311575902869810001630113604148462000100010002949029528294932954129536
6300429489237120011050000474029005202440830001000200010002000500010001901614928824295043103000300030002935929272116100110001000120000420000003200240240013177928269493183047207083336380910696102867310001608213478150352000100010002942729496295232955129539
630042955023601100001788100474229148002445530031000200010012000500010000501616228844294053103000300030002926329370116100110001000020000420000000200040040013286947569543154054208303285381611545702870110001636813626150952000100010002953829427294752951229503
630042942423710000008010047082905810243983000100020001000200050001000050161662889929576310300030003000292152927811610011000100012000042000000020004006201328996696965314004620912337838127636002881210001615513769149632000100010002947829557295272952529461
630042953923600100004010046722909000244133000100020001000200050001000011161892871529400310300030003000292882936911610011000100002000262000000520054034001320394126928321705820683330238159505602863010001617513601148802000100010002947429297293042942229355
63004293692361010000488000466728993202418630001000200010002000500010000001615228763292908103000300030002926129304216100110001000020000420000000200040240013330935669423142149206963279381110636002858010001592113382148722000100010002932329215293402935729422
630042940723610000105000047592888202241973000100020001000200050001000000161722872229406310300030003000292222929611610011000100002000242000000220004006001333594817009320905120751324138079465902855210001615613265148922000100010002953929420293222947929307
6300429334235120000050000457428986202422630001000200010002000500010000001618228787293633103003300030002919829181116100110001000020002420000000200040040013325922970253168045207703314381514625602869410001632713561147292000100010002931729366292822942629385
6300429405236000000050000475728996202432130031000200010002000500010000001617628816294873103000300030002916429263116100110001000120000420000000200040040013416924469723169044207293267381514525302869110001617013459150182000100010002941929282295492942429356
630042944823600100001000046492895100243023000100020001000200050001000000161732889029437310300030003000293532926011610011000100002000042000000400200040040013288935069613179047206923303381312635802867310001618013520151992000100010002948829401293202937729402

Test 2: throughput

Count: 8

Code:

  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [x6], x8
  ld1 { v0.4h, v1.4h, v2.4h }, [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)03l1d tlb fill (05)mmu table walk data (08)09l2 tlb miss data (0b)0e0f18191e1f23243a3f4346494f51schedule 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)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)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)st unit uop (a7)l1d cache writeback (a8)a9acafb5b6bbl1d cache miss ld nonspec (bf)l1d tlb miss nonspec (c1)c2cfd5map dispatch bubble (d6)ddfetch restart (de)e0e7? int output thing (e9)eaeb? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
240205800416201011000158000280027066202524010080100160000801001600002050084367161908001680041800414995434999924010020024000020024000080041800411180201100991001008000080000010016001212431600520115116003961524213051101161180038080000131416000080000801008004280165800428004280163
2402048004162010000010578800280149260652524029080176161934814341627452077541372658308031880164802865001132501662408382002404892002404938040980163218020110099100100800008000001001601311343160170000164016026661124313051261252280139080062131316000080000801008028680164801618041080286
24020480166623100200221901760028002836622252401008010016000080100160000204703136727420800168004180041499673499992401002002400002002400008004180041118020110099100100800008000001001600131342160051010511600396152441205110116118003908000013016000080000801008004280042800448004280044
240204800416211001000067000280026236182524010080100160000801001600002052000365278208001680041800414995434999924010020024000020024000080041800411180201100991001008000080000010016001214431600520005216003961524313051101161180038080000131316000080000801008004280042800428004280044
240204800416201111000469000280171236202524010080173160000801001600002047835366604408001680041800414995734999924010020024000020024000080041800411180201100991001008000080000010016001215421600520015116003961524213051101161180037080000141416000080000801008004180041800418004180041
240204800406200000000042000280025212101725240100801001600008010016000020447643672671080016800408017049954349998240100200240000200240000800408004011802011009910010080000800000100160000035160036000361600366131350051101161180037080000141416000080000801008004180041800418004180041
240204800406210000000042000280025212121625240100801001600008010016000020597303672671080015800408004049953349998240100200240000200240000800408004011802011009910010080000800000100160000035160036000321600366131400051101161180037080000161016000080000801008004180041800418004180041
24020480040621000000005100028002521212162524010080100160000801001600002054659367517808001580040800404995334999824010020024000020024000080040800401180201100991001008000080000010016000003516003600036160036613140005110116118003708000001416000080000801008004180041800418004180041
240204800406210000000042000280025212121625240100801001600008010016000020435403675999080015800408006549953349998240100200240000200240000800408004011802011009910010080000800000100160000035160036000361600006136420051101161180037080000101016000080000801008004180041800418004180041
240204800406200000000075000280025200232524010080100160000801001600002058431367266408001580040800424995334999824010020024000020024000080040800411180201100991001008000080000010016000003516003601001600366132400051101162180037080000101416000080000801008004180041800418004180041

1000 unrolls and 10 iterations

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

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)0e0f18191e1f23243a3f4346494f51schedule 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 simd alu (9a)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)c2c3branch mispred nonspec (cb)cfd5map dispatch bubble (d6)dadbddfetch restart (de)e0? int output thing (e9)eaeb? ldst retires (ed)? simd retires (ee)? int retires (ef)f5f6f7f8fd
24002580040620000001100184000180025131726162524001080010160000800101600002048821367600800800158004080040499763500242400102024000020240000800408004011800211091010800000800000101600000500160046012461600476146400005020515009980037800006616000080000800108004180041800418004180041
2400258004062000000110052000180025131727162524001080073160000800101600002053159366600700800158004080040499753500212400102024000020240000800408016411800211091010800000800000101600000500160046000501600466146400005020915009980037800006616000080000800108004280041800418004180162
24002480040621000000000550001800251217271625240010800101600008001016000020547893676008008001580040800404997535002024001020240000202400008004080040118002110910108000008000001016000005001600460104916004661460000502010150091180037800006616000080000800108004180041800428004180041
240024800406200000000006400008002512026162524001080010160000800101600002055129367322000800168004080040499753500202400102024000020240000801618004011800211091010800000800000101600000500160046000461602746146400005020916009980037800006616000080000800108004180162800418004180041
24002480040620000000000528800180150121727162524001080010160000800101600002063161366196900800158004080165499753500212402542024000020240000800408004011800211091010800000800000101600000500160046010471600466117400005020515009980037800006616000080000800108004180041800418004180164
24002480040620000000000520001800251217272025240010800101600008001016000020583103672631008001580040800405003035002124001020240000202400008004080040118002110910108000008000001016000005001600460004716004661464000050369250041080149800646616000080000800108004180041800418004180042
24002480040620000000000528800180147121626148572405628007516024680093160321206036336857680080214801638028250030185018324025320240255202404898016180065218002110910108000008000001016023675001601590008521601596146400005036102500111280235800626616000080000800108028280164802878028780165
2400248028562200000000053000180026121627202524001080010160000800101600002055129366937000800158004080040499763500202400102024000020240000800408004011800211091010800000800000101600000500160047000461600476147400005020916006880037800006016000080000800108004180041800418004180041
24002480040620000001000520001800251217261925240010800101600008001016000020631613675927008001580040800404997534997124001020240000202400008004080040118002110910108000008000001016000005001600500004616004661464000050201016006980038800006616000080000800108004280041800418004180041
240024800406200000000005200018002512172717252400108001016000080010160000205315936660460080314800408004049977350021240010202400002024000080040800401180021109101080000080000010160000050016004700049160046614740000502091600101080037800006616000080000800108004180041800418004180041