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
Code:
suqadd d0, d1
movi v0.16b, 1 movi v1.16b, 2
(no loop instructions)
Retires: 1.000
Issues: 1.000
Integer unit issues: 0.001
Load/store unit issues: 0.000
SIMD/FP unit issues: 1.000
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch simd uop (57) | ldst uops in schedulers (5b) | dispatch uop (78) | map simd uop (7e) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
1004 | 3033 | 1001 | 1 | 1000 | 1000 | 75905 | 1000 | 1000 | 2000 | 1 | 1000 |
Code:
suqadd d0, d1
movi v0.16b, 1 movi v1.16b, 2
(fused SUBS/B.cc loop)
Result (median cycles for code): 3.0033
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10006 | 200 | 20012 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
Result (median cycles for code): 3.0084
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 67 | 768356 | 10053 | 20 | 10040 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20096 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20076 | 11 | 10000 | 10 |
Code:
suqadd d0, d0
movi v0.16b, 1
(fused SUBS/B.cc loop)
Result (median cycles for code): 3.0033
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 768905 | 10100 | 200 | 10004 | 200 | 20008 | 1 | 10000 | 100 |
10204 | 30033 | 10101 | 101 | 10000 | 100 | 10000 | 300 | 769247 | 10131 | 202 | 10046 | 200 | 20008 | 1 | 10000 | 100 |
Result (median cycles for code): 3.0033
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20088 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
10024 | 30033 | 10021 | 21 | 10000 | 20 | 10000 | 70 | 768905 | 10020 | 20 | 10000 | 20 | 20000 | 11 | 10000 | 10 |
Count: 8
Code:
movi v0.16b, 0 suqadd d0, d8 movi v1.16b, 0 suqadd d1, d8 movi v2.16b, 0 suqadd d2, d8 movi v3.16b, 0 suqadd d3, d8 movi v4.16b, 0 suqadd d4, d8 movi v5.16b, 0 suqadd d5, d8 movi v6.16b, 0 suqadd d6, d8 movi v7.16b, 0 suqadd d7, d8
movi v8.16b, 9
(fused SUBS/B.cc loop)
Result (median cycles for code divided by count): 0.5011
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
160204 | 40506 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320056 | 80113 | 200 | 80013 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40108 | 80110 | 101 | 80009 | 100 | 80013 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160026 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40107 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
160204 | 40086 | 80109 | 101 | 80008 | 100 | 80012 | 300 | 320052 | 80112 | 200 | 80012 | 200 | 160024 | 1 | 160000 | 100 |
Result (median cycles for code divided by count): 0.5057
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
160024 | 43863 | 80019 | 11 | 80008 | 10 | 80012 | 30 | 320052 | 80022 | 20 | 80012 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 41331 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320568 | 80152 | 20 | 80142 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 40532 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320148 | 80047 | 20 | 80037 | 20 | 160168 | 1 | 160000 | 10 |
160024 | 40578 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320000 | 80010 | 20 | 80000 | 20 | 160072 | 1 | 160000 | 10 |
160024 | 40407 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320000 | 80010 | 20 | 80000 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 40543 | 80047 | 11 | 80036 | 10 | 80036 | 30 | 320000 | 80010 | 20 | 80000 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 40583 | 80082 | 11 | 80071 | 10 | 80071 | 30 | 320000 | 80010 | 20 | 80000 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 40453 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320148 | 80047 | 20 | 80037 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 40450 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320000 | 80010 | 20 | 80000 | 20 | 160000 | 1 | 160000 | 10 |
160024 | 40390 | 80011 | 11 | 80000 | 10 | 80000 | 30 | 320280 | 80080 | 20 | 80070 | 20 | 160138 | 1 | 160000 | 10 |
Count: 16
Code:
suqadd d0, d16 suqadd d1, d16 suqadd d2, d16 suqadd d3, d16 suqadd d4, d16 suqadd d5, d16 suqadd d6, d16 suqadd d7, d16 suqadd d8, d16 suqadd d9, d16 suqadd d10, d16 suqadd d11, d16 suqadd d12, d16 suqadd d13, d16 suqadd d14, d16 suqadd d15, d16
movi v16.16b, 17
(fused SUBS/B.cc loop)
Result (median cycles for code divided by count): 0.5002
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
160204 | 80103 | 160107 | 101 | 160006 | 100 | 160010 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320028 | 1 | 160000 | 100 |
160204 | 80035 | 160107 | 101 | 160006 | 100 | 160010 | 300 | 640044 | 160110 | 200 | 160014 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640044 | 160110 | 200 | 160014 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320128 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320024 | 1 | 160000 | 100 |
160204 | 80035 | 160105 | 101 | 160004 | 100 | 160008 | 300 | 640036 | 160108 | 200 | 160012 | 200 | 320024 | 1 | 160000 | 100 |
Result (median cycles for code divided by count): 0.5002
retire uop (01) | cycle (02) | schedule uop (52) | schedule int uop (53) | schedule simd uop (54) | dispatch int uop (56) | dispatch simd uop (57) | int uops in schedulers (59) | ldst uops in schedulers (5b) | dispatch uop (78) | map int uop (7c) | map simd uop (7e) | map int uop inputs (7f) | map simd uop inputs (81) | ? int output thing (e9) | ? simd retires (ee) | ? int retires (ef) |
160024 | 80115 | 160017 | 11 | 160006 | 10 | 160010 | 30 | 640036 | 160018 | 20 | 160012 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640200 | 160062 | 20 | 160060 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |
160024 | 80035 | 160011 | 11 | 160000 | 10 | 160000 | 30 | 640000 | 160010 | 20 | 160000 | 20 | 320000 | 1 | 160000 | 10 |