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

MSR (NZCV)

Test 1: uops

Code:

  msr nzcv, x0
  mrs x0, nzcv

(no loop instructions)

1000 unrolls and 1 iteration

Retires: 1.000

Issues: 1.000

Integer unit issues: 1.000

Load/store unit issues: 0.000

SIMD/FP unit issues: 0.000

retire uop (01)cycle (02)03093f51schedule uop (52)schedule int uop (53)dispatch int uop (56)int uops in schedulers (59)606d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map int uop inputs (7f)8283flush restart other nonspec (84)85inst all (8c)l1d tlb miss (a1)l1d cache writeback (a8)cfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)f5f6f7f8fd
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535405625100010001000500015355353703388100010001000535901110010073221225291000536536536536536
1004535403525100010001000500015355353703388100010001000535901110010073221225291000536536536536536

Test 2: throughput

Code:

  msr nzcv, x0
  mrs x0, nzcv

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 0.5090

retire uop (01)cycle (02)03l2 tlb miss data (0b)1e3f51schedule uop (52)schedule int uop (53)dispatch int uop (56)int uops in schedulers (59)60696a6d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map int uop inputs (7f)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst branch cond (94)inst int alu (97)9fl1d cache writeback (a8)acbranch cond mispred nonspec (c5)branch mispred nonspec (cb)cdcfd5map dispatch bubble (d6)e0? int output thing (e9)? int retires (ef)f5f6f7f8fd
10204513740002828101101011010114505601492010509050903779737891011410224102245090901110201100991001001000011171901650871001010050915091509150915091
10204509039002828101101011010114505601492009509050903779737891011410224102245090901110201100991001001000011171901650871001010050905091509150915091
10204509040002828101101011010114505601492010509050903779737891011410224102245090901110201100991001001000911171901650871001010050915091509150915091
10204509039002828101101011010114505601492010509050893779737891011410224102245090901110201100991001001002011171901650871001010050915091509150915091
10204509040002828101101011010114505601492010509050903779737891011410224102245090901110201100991001001000011171901650871001010050915091509050915091
102045090390028281011010110101145056014920105090509037797378910114102241022450909011102011009910010010005711171911650871001010050915091509150915091
10204509039002828101101011010114505601492010509050903779737891011410224102245090901110201100991001001000011171901650871001010050915091509150915091
10204509039002828101101011010114505601492010509050903779737891011410224102245090901110201100991001001000011171901650871001010050915091509150905090
10204509040002828101101011010114505601492010509050903779737891011410224102245090901110201100991001001000011171901650871001010050915091509150915091
102045090390011228101101011010114505601492010509050903779737891011410224102245090901110201100991001001000011171901650871001010050915091509150915091

1000 unrolls and 10 iterations

Result (median cycles for code): 0.5040

retire uop (01)cycle (02)031e3f51schedule uop (52)schedule int uop (53)dispatch int uop (56)int uops in schedulers (59)696a6d6emap stall dispatch (70)map rewind (75)map stall (76)dispatch uop (78)map int uop (7c)map int uop inputs (7f)8283flush restart other nonspec (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst branch cond (94)inst int alu (97)9fl1d tlb access (a0)l1d tlb miss (a1)l1d cache writeback (a8)accfd5map dispatch bubble (d6)ddfetch restart (de)e0? int output thing (e9)? int retires (ef)f5f6f7f8fd
100245044391214025100101001010010500504919605040504037483376610010100201002050409011100211091010100000640420435036100001050415041504150415041
10024504039123525100101001010010500504920065125508637483376610010100201002050409011100211091010100000640420435036100001050415041504150415041
1002450403903525100101001010010500504919605040504037483376610010100201002050409011100211091010100000640320315036100001050415041504150415041
1002450403903525100101001010010500504919605040504037483376610010100201002050409011100211091010100003640320335036100001050415041504150415041
1002450403903525100101001010010500504919605040504037483376610010100201002050409011100211091010100000640320235036100001050415041504150415041
1002450403905825100101001010010500504919605040504037483376610010100201002050409011100211091010100000640420435036100001050415041504150415041
1002450403903525100101001010010500504919605040504037483376610010100201002050409011100211091010100000640420435036100001050415041504150415041
1002450403905625100101001010010500504919605040504037483376610010100201002050409011100211091010100000640420345036100001050415041504150415041
1002450403903525100101001010010500504919605040504037483376610010100201002050409011100211091010100010640420445036100001050415041504150415041
1002450403903525100101001010010500504919605040504037483376610010100201002050409011100211091010100003640420435036100001050415041504150415041