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, 2D)

Test 1: uops

Code:

  ld1 { v0.2d, v1.2d, v2.2d }, [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)03mmu table walk instruction (07)mmu table walk data (08)l2 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)5f6061696d6emap 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)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)e0e7? int output thing (e9)eaebec? ldst retires (ed)? int retires (ef)f5f6f7f8fd
63005296272382601700000990000458728957033240174000100030001000300050001500490016149287592957631040003000400029367292971161001100010000300009300000430005109001321392986896311295820742335538222050492865901000160841348614784300010002943129253293592943429445
630042941023621012000004110100462128917003241704000100030001000300050001500170016156287332948231040003000400029285292511161001100010000300009300400430065140001317992646894321855220673318138202449522863601000160761355714779300010002935129430294022944329372
630042945223717020000005130000465728939020242154000100030001000300050001500000016142289012949931040003000400029256292581161001100010000300009300400030045049001315593576916319175420738333738171754532867401000160051356515148300010002947429350293902940829462
630042945423719017000005430000468729052000242684000100030001000300050001500000016151287212945131040003000400029268293111161001100010000300009300400030045149001326691896972316065520777329638201448572858201000164341352115052300010002943629601294572938629361
630042945423714020000006090100454428960030241904000100030001000300050001500420016160287372927231040003000400029266293111161001100010000300009300400430065040001330992516912313864720698331738232455542861301000162321357215068300010002946629375294532949429367
630042959023719014000005310100470429024000242534000100030001000300050001500410016159288552944531040003000400029283292931161001100010000300000300400030005109001317594986920316765420806331438212051532875301000163541333814920300010002940929315294852946029351
630042947423717021011006150000471229037031242584000100030001000300050001500000016146288582941631040003000400029206294421161001100010000300009300400030050149001310794716952316675620772336538291553492854601000159721320914846300010002933129322294692939829382
630042946023618015000004920000473629009001242224000100030001000300050001500050016137288422950831040003000400029274293061161001100010000300000300010430010049001318694076931320265520768326538231754462858701000159541334715214300010002932729389294562956629317
630042945223617021000005500000468929029001242224000100030001000300050001500430016147287802949031040003000400029281291891161001100010000300009300000030045100001341695226961314565120751320038261752462853001000163121337015232300010002929129482294382929929464
6300429441237170260000058501004664290470002406840001000300010003000500015003509161532876229555310400030004000293502929511610011000100003000293004004300451490013154946369363130105220700326938241647502861901000161331334814931300010002949729412293722938429405

Test 2: throughput

Count: 8

Code:

  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [x6], x8
  ld1 { v0.2d, v1.2d, v2.2d }, [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)03l1d tlb fill (05)mmu table walk instruction (07)mmu table walk data (08)09l2 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)92inst 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)st unit uop (a7)l1d cache writeback (a8)a9acafb5b6bbl1d cache miss ld nonspec (bf)l1d tlb miss nonspec (c1)c2branch mispred nonspec (cb)cfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)eaeb? ldst retires (ed)? int retires (ef)f5f6f7f8fd
2402058008362000010000004600028004926622253201008010024000080100240000678470352221400800408007080060499833500223201002002401892003200008006080377118020110099010010080000800000100240000043024004000085124004151404400051101161180062800001410240000801008006580069800658006580065
24020480064620000000000045000180049217602532010080100240000801842400006784703522214008003980067800644998735002132010020224000020032000080069800691180201100990100100800008000001002400141544024005618056240000615444140051101161180066800001313240000801008007080071800708007080070
24020480074620100000000016000280055277202532010080100240000801002400006687873498422008004480073800694999635002732010020024000020032000080073800691180201100990100100800008000001002400141444024005400060240000515544140051101161180061800001414240000801008006180061800618006180065
240204802196200000000001450002800492662225320100801002400008010024000067847035014971080039800608006449987350028320100200240000200320000800608006911802011009901001008000080000010024000004302400410109642400416140430005110116138005780000010240000801008006580221800618006780065
24020480061620000000000045000280050261720253201008010024000080100240000678470350157800800408022180064499873500223201002002400002003200008006880069218020110099010010080000800001100240000043024004100032400400140440005110116118006780000010240000801008006280066800658006880065
24020480064620000000000046000280049261716683320291801672401308016424017871113235194500080175803758037750199235014732058520024057720032051380376803882180201100990100100800008000001002401300433224030000782524017161394400051240251280202800661010240000801008035680224803748020280227
240204803836220000100011178000180162017616653320314802462401308029824017896757235180670080039802208021850186255014532034220024019320032025780219802001180201100990100100800008000001002400000440240041000402400416140440005110116118005780000010240000801008006580061800658006980061
24020480064620000000000046000180050266222532010080100240000801002400006783483495411008003980069800604998335001832010020024000020032000080060802571180201100990100100800008000001002400000430240040000412400405140440005110116118006580000010240000801008006580068800658007480065
240204800646210000000000450002800572661625320100801002400008010024000067835135079210080039801658006449983350022320100200240000200320000800648007511802011009901001008000080000010024000004302400400004724003951404400051101161180063800001410240000801008006680061800698006580065
2402048006462000000000004500028004926172125320100801002400008010024000062242835224551080039800498006049987350018320100200240000200320000800608021611802011009901001008000080000010024000004302400400004024004161404400051101161180067800001010240000801008006980066800658006680061

1000 unrolls and 10 iterations

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

retire uop (01)cycle (02)03l1d tlb fill (05)mmu table walk data (08)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)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 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)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
240025800696211000000620000800542771925320010800102400008001024000059054234897170800448007680080500153500493200102024000020320000800698006911800211090101080000800000102400151444024005510160240041515544141050203116311380066800001413240000800108004880070800708005580070
240024800746201000000630003800623771925320010800102400008001024000059054235174130800468008280077500153500493200102024000020320000800698007311800211090101080000800000102400151544024005410057240041515644141050203016291380160800001313240000800108007080074800488007080070
2400248004762010000006300028005407722253200108001024000080010240000652982348983608004880084800695001835003132001020240000203200008006980069118002110901010800008000001024001414002400550106024000001144414005020311613308006680000130240000800108007080070800488007480070
240024800476211000000620002800322072025320010800102400008001024000067928534897170800458008780075500143500493200102024000020320000800698006911800211091101080000800000102400141444024005500016240000501444140050202816283080071800001313240000800108007080070800708007480070
24002480073621110100063000280395277192532001080010240000800102400006003663489717080044800618006950018350052320010202400002032000080073800691180021109010108000080000010240014154402400530115624004261544414005020261628138006680000013240000800108007080070800708007480070
240024800696201000000620002800542772025320010800102400008001024000065298234897170800448006580072500143500493200102024000020320000800738006911800211090101080000800000102400151444024005500156240041615444141050201316293080066800021313240000800108007480070800708007480070
240024800736201010000620002800362772125320010800102400008001024000074872534894460800448008680074500153500493200102024000020320000800698004811800211090101080000800000102400161443024005510057240041515544140050203316331480066800001313240000800108007080070800708007080074
24002480048620100000063000180054377192532001080010240000800102400006492133517413080022800668016950015350051320010202400002032000080071800691180021109010108000080000010240014144402400550005724000061544414005020121630168006680000130240000800108007080070800708005380084
24002480069620100000063000380056277025320010800102400008001024000078502235000100800458008680069500153500493200102024000020320000800698006911800211090101080000800000102400141444024005500057240040615445140050203016321480066800001313240000800108007080070800708007480048
240024800696201000000810003800542771925320010800102400008001024000066161234896430800488006980069500193500493200102024000020320000800738006911800211090101080000800000102400141444024005600060240041011445141050201416291680070800001313240000800108007080048800748007080070