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

MRS (CNTFRQ_EL0)

Test 1: uops

Code:

  mrs x0, cntfrq_el0

(no loop instructions)

1000 unrolls and 1 iteration

Retires: 1.000

Issues: 1.000

Integer unit issues: 1.001

Load/store unit issues: 0.000

SIMD/FP unit issues: 0.000

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)? int output thing (e9)? int retires (ef)
1004160391001100110011000
1004160401001100110011000
1004160381001100110011000
1004160401001100110011000
1004160401001100110011000
1005163251017101710011000
1004160411001100110011000
1004160401001100110011000
1004160381001100110011000
1004160391001100110011000

Test 2: throughput

Count: 8

Code:

  mrs x0, cntfrq_el0
  mrs x1, cntfrq_el0
  mrs x2, cntfrq_el0
  mrs x3, cntfrq_el0
  mrs x4, cntfrq_el0
  mrs x5, cntfrq_el0
  mrs x6, cntfrq_el0
  mrs x7, cntfrq_el0

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

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

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)int uops in schedulers (59)dispatch uop (78)map int uop (7c)map int uop inputs (7f)map ldst uop inputs (80)map simd uop inputs (81)? int output thing (e9)? ldst retires (ed)? simd retires (ee)? int retires (ef)
8020412800808010180101010030010020020000800180080100
8020412800838010180101010030010020020000800340080100
8020412800808010180101010030010020020000800010080100
8020512804418012080120010030010020020000800010080100
8020512804368011980119010030010020020000800010080100
8020612807608013580135010030010020020000800170080100
8020612807228013380133010030010020020000800010080100
8020612807698013480134010030010020020000800330080100
8020512803878011780117010030010020020000801010080100
8020512807228013480134010030010020020400808670080100

1000 unrolls and 10 iterations

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

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule ldst uop (55)dispatch int uop (56)int uops in schedulers (59)dispatch uop (78)map int uop (7c)map int uop inputs (7f)? int output thing (e9)? int retires (ef)
8002412800718001180011010301020208001780010
8002412800778001180011010301020208001980010
8002412800728001180011010301020208002080010
8002412800908001180011010301020208001980010
8002412800718001180011010301020208001980010
8002412800818001180011010301020208003280010
8002412800738001180011010301020208001980010
8002412801018001180011010301020208001980010
8002412801038001180011010301020208001980010
8002412800748001180011010301020208001780010