Apple M1 Microarchitecture Research by Dougall Johnson

Firestorm: Overview | Base Instructions | SIMD and FP Instructions
Icestorm:  Overview | Base Instructions | SIMD and FP Instructions

UCVTF (scalar, fixed-point, H from X)

Test 1: uops

Code:

  ucvtf h0, x0, #3
  mov x0, 1
  mov x1, 2

(no loop instructions)

1000 unrolls and 1 iteration

Retires: 2.000

Issues: 2.000

Integer unit issues: 0.000

Load/store unit issues: 1.000

SIMD/FP unit issues: 1.000

retire (01)cycle (02)033f51inst issue (52)~issue fp/simd (54)~issue ld/st (55)~dispatch fp/simd (57)~dispatch ld/st (58)huge thing ld/st (5a)huge thing fp/simd (5b)60696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op ld/st (7d)~map op fp/simd (7e)~map lookup ld/st (80)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst neon or fp (9a)a6a8accfd5d6ddinst fetch restart (de)e0ld/st retires (ed)? fp/simd (ee)f5f6f7f8fd
20043763361252000100010001000100014075229330357376376723109200010001000100010003763761110011000100000731161137310001000377379377377378
20043762361252000100010001000100014075228201357376376723109200010001000100010003763761110011000100000731161137310001000377377377377377
20043762361252000100010001000100014075228201357376376723109200010001000100010003763761110011000100000731161137310001000377377377377377
20043773364252000100010001000100014075228200357376376723109200010001000100010003763761110011000100000731161237310001000377377377377377
20043762361252000100010001000100014075228200357376376723109200010001000100010003763761110011000100000731161137310001000377377377377377
20043763361252000100010001000100014075228201357376376723109200010001000100010003763761110011000100000731161137310001000377377377377377
20043843361252000100010001000100014197228200357376376723109200010001000100010003763761110011000100000731161137310001000377377377377377
20043763361252000100010001000100014075228200357376376723109200010001000100010003763761110011000100000731161137310001000377377377377377
20043762361252000100010001000100014075228200357376376723109200010001000100010003763761110011000100000731161137310001000377379377377377
20043763361252000100010001000100014075228200357376376723109200010001000100010003763761110011000100000732162337310001000377377377377377

Test 2: Latency 1->2 roundtrip

Code:

  ucvtf h0, x0, #3
  fmov x0, d0
  mov x0, 1
  mov x1, 2

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 13.0032

retire (01)cycle (02)0308090b18191e1f3a3f4f51inst issue (52)~issue int (53)~issue fp/simd (54)~issue ld/st (55)~dispatch int (56)~dispatch fp/simd (57)~dispatch ld/st (58)huge thing int (59)huge thing ld/st (5a)huge thing fp/simd (5b)60696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op ld/st (7d)~map op fp/simd (7e)~map lookup int (7f)~map lookup ld/st (80)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa0a1a6a7a8a9acc2cfd0d5d6ddinst fetch restart (de)e0? int output thing (e9)ld/st retires (ed)? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
3020413003297400000000130017119450254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212951910000100001000010100130033130033130033130102130033
3020413003297400000000130017119410254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212951910000100001000010100130033130033130056130057130033
3020413003297400000000130017119413254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300331300411120201100991001010010000100001000000000131013162212951910000100001000010100130033130033130033130069130033
3020413003297300000000130017119448254010010100200001000010020000100005006214497148027091130013130042130037125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012163212951910000100001000010100130033130033130049130079130033
3020413003297400000300130017119441254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212951910000100001000010100130116130033130033130084130033
3020413003297401000000130017119433254010010100200001000010020000100005006214497148027091130013130032130032125466312624230100200100002000020010000200001300321300321120201100991001010010000100001000000000131012265412951910000100001000010100130033130033130033130083130033
3020413003297400000000130017119411254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212951910000100001000010100130033130034130094130063130033
3020413003297400000000130017119408254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212951910000100001000010100130071130033130033130079130033
3020413003297400000000130017119408254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212952010000100001000010100130033130033130033130089130033
3020413003297400000000130017119427254010010100200001000010020000100005006214497148027091130013130032130032125466312624030100200100002000020010000200001300321300321120201100991001010010000100001000000000131012162212951910000100001000010100130033130033130033130072130033

1000 unrolls and 10 iterations

Result (median cycles for code): 13.0032

retire (01)cycle (02)03080b18191e1f3f4f51inst issue (52)~issue int (53)~issue fp/simd (54)~issue ld/st (55)~dispatch int (56)~dispatch fp/simd (57)~dispatch ld/st (58)huge thing int (59)huge thing ld/st (5a)huge thing fp/simd (5b)5f60696b6d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op ld/st (7d)~map op fp/simd (7e)~map lookup int (7f)~map lookup ld/st (80)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa0a6a8a9acc2c5branch mispredict (cb)cdcfd5d6ddinst fetch restart (de)e0? int output thing (e9)ld/st retires (ed)? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
30024130035974000000130017119408254001010010200001000610200001000050621449714800528001300320130032130032125489312626230010201000020000201000020000130041130032112002110910100101000010010000900000012701161112951910000100001000010010130033130033130033130033130033
30024130032974000000130017119408254001010010200001000010200001000050621449714800528001300130130032130032125500312626230010201000020000201000020000130032130032112002110910100101000010010000000000012701161112951910000100001000010010130033130033130033130033130033
30024130032974000000130017119408254001010010200001000010200001000050621449714800528001300130130032130032125489312626230010201000020000201000020000130032130032112002110910100101000010010000000000012701161112951910000100001000010010130033130033130033130033130033
30024130032974000000130017119408254001010010200001000010200001000050621449714800528001300130130032130068125489312626230010201000020000201000020000130032130032112002110910100101000010010000000000012701161112952010000100001000010010130033130033130033130033130033
300241300329740000540130017119408254001010010200001000010200001000050621449714800528001300130130032130032125489312626230010201000020000201000020000130032130032112002110910100101000010010000000000012701161112951910000100001000010010130037130033130033130033130033
30024130032974000000130017119408254001010010200031000010200001000050621449714800528011300130130032130032125489312626230010201000020000201000020000130032130032112002110910100101000010010000000000012701161112951910000100001000010010130033130033130033130033130033
30024130032974000000130017119408254001010010200001000010200001000050621449714800528001300130130032130032125489312626230010201000020000201000020000130032130032112002110910100101000010010000000000012700161112951910000100001000010010130033130033130033130033130033
30024130032974000100130017119408254001010010200001000010200001000050621449714800528011300130130032130032125489312626230010201000020000201000020000130032130032112002110910100101000010010000000000012701161212951910000100001000010010130033130033130033130033130033
30024130032974000030130017119408254001010010200001000010200001000050621449714800528001300130130032130032125489812626230010201000020000201000020000130032130032112002110910100101000010010002000000012702161112951910000100001000010010130033130033130033130033130033
30024130032973003000130017119408254001010010200001000010200001000050621449714800528001300130130032130032125489312626230010201000020000201000020000130032130032112002110910100101000010010000000210012701161112958210000100001000010010130033130033130033130033130033

Test 3: throughput

Count: 8

Code:

  ucvtf h0, x8, #3
  ucvtf h1, x8, #3
  ucvtf h2, x8, #3
  ucvtf h3, x8, #3
  ucvtf h4, x8, #3
  ucvtf h5, x8, #3
  ucvtf h6, x8, #3
  ucvtf h7, x8, #3
  mov x8, 9

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

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

retire (01)cycle (02)03091e3f4f51inst issue (52)~issue int (53)~issue fp/simd (54)~issue ld/st (55)~dispatch int (56)~dispatch fp/simd (57)~dispatch ld/st (58)huge thing int (59)huge thing ld/st (5a)huge thing fp/simd (5b)60696b6d6edispatch stall (70)72scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op ld/st (7d)~map op fp/simd (7e)~map lookup int (7f)~map lookup ld/st (80)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa6a8acc5branch mispredict (cb)cdcfd5d6ddinst fetch restart (de)e0ld/st retires (ed)? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
16020426711207002669402516010010080000800001008002080014500116895118841630266900267092670966320666581601352008002480024200800208002026717267091180201100991001008000010080000001115117016002670680000800001002671026710267102671026710
1602042670920701226694025160100100800008000010080020800165001168951188416302669002670926709663206665816013520080020800202008002480020267172671411802011009910010080000100800000121115117016002670680000800001002671026710267102671026710
16020426709207002669402516010010080000800001008002080015500116895118810160266900267092670966320666581601352008002080020200800248002026795267161180201100991001008000010080000031115117016002670680000800001002671026710267102671026710
16020426711207002669402516010010080000800001008002080015500116895118841630266900267092670966320666581601352008002080024200800208002426709267091180201100991001008000010080000001115117016002670680000800001002671026710267102671026710
16020426709207002669402516010010080000800001008002080015500116895118841630266900267092670966320666581601352008002480216200800208002026709267711180201100991001008000010080000001115117016002671080000800001002671026710267102671026710
16020426709207002669402516010010080000800001008002080015500116895118841630266900267092671166320666581601352008002080020200800208002026709267131180201100991001008000010080000001115117016002671080000800001002671426714267102671026710
16020426709207002669402516010010080000800001008002080015500116895118841630266900267092670966320666581601352008002080012200800208002026716267091180201100991001008000010080000001115117016002670680000800001002671026710267102671026710
16020426709207002669402516010010080000800001008002080015500116895118841630266900267092670966320666621601352008002080020200800208002426709267091180201100991001008000010080000001115117016002670680000800001002671026710267102671026710
16020426709207002669402516010010080000800001008002080015500116895118841630266900267092670966320666581601352008002480024200800208002026709267091180201100991001008000010080000001115117016002670680000800001002671026710267102671026710
1602042670920700266940251601001008000080000100800208001550011689511884163026690026711267096632066658160135200804008002020080020800202670926709118020110099100100800001008000009541115117016002670680000800001002671026710267102671026710

1000 unrolls and 10 iterations

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

retire (01)cycle (02)031e1f3f51inst issue (52)~issue int (53)~issue fp/simd (54)~issue ld/st (55)~dispatch int (56)~dispatch fp/simd (57)~dispatch ld/st (58)huge thing int (59)huge thing ld/st (5a)huge thing fp/simd (5b)5f6061696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op ld/st (7d)~map op fp/simd (7e)~map lookup int (7f)~map lookup ld/st (80)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa6a8a9acc5cdcfd0d2d5d6ddinst fetch restart (de)e0ld/st retires (ed)? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
16002426710200002669425160010108000080000108000080000501168880188403201026690267092671266533668916001020800008000020800008000026709267181180021109101080000108000000000502015051642267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002670926709118002110910108000010800000000050203041624267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002671226718118002110910108000010800000000050203021642267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002721926718118002110910108000010800000000050200041624267068000080000102671326710267112671026717
1600242670921500266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002670926709118002110910108000010800000000050200041642267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002670926709118002110910108000010800000000050200041642267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002670926709118002110910108000010800000000050200041644267068000080000102671026710267102671026710
1600242670919900266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000800002671126709118002110910108000010800000000050200041624267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320002669026709267096653366891600102080000800002080000803782670926709118002110910108000010800000000050200041644267068000080000102671026710267102671026710
1600242670920000266942516001010800008000010800008000050116888018840320102669026709267096653366891600102080000800002080000800002671026720118002110910108000010800000000050200021624267068000080000102671026710267102671026710