@@ -58,11 +58,46 @@ static void cssc_sigill(void)
58
58
asm volatile (".inst 0xdac01c00" : : : "x0" );
59
59
}
60
60
61
+ static void f8cvt_sigill (void )
62
+ {
63
+ /* FSCALE V0.4H, V0.4H, V0.4H */
64
+ asm volatile (".inst 0x2ec03c00" );
65
+ }
66
+
67
+ static void f8dp2_sigill (void )
68
+ {
69
+ /* FDOT V0.4H, V0.4H, V0.5H */
70
+ asm volatile (".inst 0xe40fc00" );
71
+ }
72
+
73
+ static void f8dp4_sigill (void )
74
+ {
75
+ /* FDOT V0.2S, V0.2S, V0.2S */
76
+ asm volatile (".inst 0xe00fc00" );
77
+ }
78
+
79
+ static void f8fma_sigill (void )
80
+ {
81
+ /* FMLALB V0.8H, V0.16B, V0.16B */
82
+ asm volatile (".inst 0xec0fc00" );
83
+ }
84
+
85
+ static void faminmax_sigill (void )
86
+ {
87
+ /* FAMIN V0.4H, V0.4H, V0.4H */
88
+ asm volatile (".inst 0x2ec01c00" );
89
+ }
90
+
61
91
static void fp_sigill (void )
62
92
{
63
93
asm volatile ("fmov s0, #1" );
64
94
}
65
95
96
+ static void fpmr_sigill (void )
97
+ {
98
+ asm volatile ("mrs x0, S3_3_C4_C4_2" : : : "x0" );
99
+ }
100
+
66
101
static void ilrcpc_sigill (void )
67
102
{
68
103
/* LDAPUR W0, [SP, #8] */
@@ -95,6 +130,12 @@ static void lse128_sigill(void)
95
130
: "cc" , "memory" );
96
131
}
97
132
133
+ static void lut_sigill (void )
134
+ {
135
+ /* LUTI2 V0.16B, { V0.16B }, V[0] */
136
+ asm volatile (".inst 0x4e801000" );
137
+ }
138
+
98
139
static void mops_sigill (void )
99
140
{
100
141
char dst [1 ], src [1 ];
@@ -216,6 +257,78 @@ static void smef16f16_sigill(void)
216
257
asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
217
258
}
218
259
260
+ static void smef8f16_sigill (void )
261
+ {
262
+ /* SMSTART */
263
+ asm volatile ("msr S0_3_C4_C7_3, xzr" : : : );
264
+
265
+ /* FDOT ZA.H[W0, 0], Z0.B-Z1.B, Z0.B-Z1.B */
266
+ asm volatile (".inst 0xc1a01020" : : : );
267
+
268
+ /* SMSTOP */
269
+ asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
270
+ }
271
+
272
+ static void smef8f32_sigill (void )
273
+ {
274
+ /* SMSTART */
275
+ asm volatile ("msr S0_3_C4_C7_3, xzr" : : : );
276
+
277
+ /* FDOT ZA.S[W0, 0], { Z0.B-Z1.B }, Z0.B[0] */
278
+ asm volatile (".inst 0xc1500038" : : : );
279
+
280
+ /* SMSTOP */
281
+ asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
282
+ }
283
+
284
+ static void smelutv2_sigill (void )
285
+ {
286
+ /* SMSTART */
287
+ asm volatile ("msr S0_3_C4_C7_3, xzr" : : : );
288
+
289
+ /* LUTI4 { Z0.B-Z3.B }, ZT0, { Z0-Z1 } */
290
+ asm volatile (".inst 0xc08b0000" : : : );
291
+
292
+ /* SMSTOP */
293
+ asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
294
+ }
295
+
296
+ static void smesf8dp2_sigill (void )
297
+ {
298
+ /* SMSTART */
299
+ asm volatile ("msr S0_3_C4_C7_3, xzr" : : : );
300
+
301
+ /* FDOT Z0.H, Z0.B, Z0.B[0] */
302
+ asm volatile (".inst 0x64204400" : : : );
303
+
304
+ /* SMSTOP */
305
+ asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
306
+ }
307
+
308
+ static void smesf8dp4_sigill (void )
309
+ {
310
+ /* SMSTART */
311
+ asm volatile ("msr S0_3_C4_C7_3, xzr" : : : );
312
+
313
+ /* FDOT Z0.S, Z0.B, Z0.B[0] */
314
+ asm volatile (".inst 0xc1a41C00" : : : );
315
+
316
+ /* SMSTOP */
317
+ asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
318
+ }
319
+
320
+ static void smesf8fma_sigill (void )
321
+ {
322
+ /* SMSTART */
323
+ asm volatile ("msr S0_3_C4_C7_3, xzr" : : : );
324
+
325
+ /* FMLALB V0.8H, V0.16B, V0.16B */
326
+ asm volatile (".inst 0xec0fc00" );
327
+
328
+ /* SMSTOP */
329
+ asm volatile ("msr S0_3_C4_C6_3, xzr" : : : );
330
+ }
331
+
219
332
static void sve_sigill (void )
220
333
{
221
334
/* RDVL x0, #0 */
@@ -353,13 +466,68 @@ static const struct hwcap_data {
353
466
.cpuinfo = "cssc" ,
354
467
.sigill_fn = cssc_sigill ,
355
468
},
469
+ {
470
+ .name = "F8CVT" ,
471
+ .at_hwcap = AT_HWCAP2 ,
472
+ .hwcap_bit = HWCAP2_F8CVT ,
473
+ .cpuinfo = "f8cvt" ,
474
+ .sigill_fn = f8cvt_sigill ,
475
+ },
476
+ {
477
+ .name = "F8DP4" ,
478
+ .at_hwcap = AT_HWCAP2 ,
479
+ .hwcap_bit = HWCAP2_F8DP4 ,
480
+ .cpuinfo = "f8dp4" ,
481
+ .sigill_fn = f8dp4_sigill ,
482
+ },
483
+ {
484
+ .name = "F8DP2" ,
485
+ .at_hwcap = AT_HWCAP2 ,
486
+ .hwcap_bit = HWCAP2_F8DP2 ,
487
+ .cpuinfo = "f8dp4" ,
488
+ .sigill_fn = f8dp2_sigill ,
489
+ },
490
+ {
491
+ .name = "F8E5M2" ,
492
+ .at_hwcap = AT_HWCAP2 ,
493
+ .hwcap_bit = HWCAP2_F8E5M2 ,
494
+ .cpuinfo = "f8e5m2" ,
495
+ },
496
+ {
497
+ .name = "F8E4M3" ,
498
+ .at_hwcap = AT_HWCAP2 ,
499
+ .hwcap_bit = HWCAP2_F8E4M3 ,
500
+ .cpuinfo = "f8e4m3" ,
501
+ },
502
+ {
503
+ .name = "F8FMA" ,
504
+ .at_hwcap = AT_HWCAP2 ,
505
+ .hwcap_bit = HWCAP2_F8FMA ,
506
+ .cpuinfo = "f8fma" ,
507
+ .sigill_fn = f8fma_sigill ,
508
+ },
509
+ {
510
+ .name = "FAMINMAX" ,
511
+ .at_hwcap = AT_HWCAP2 ,
512
+ .hwcap_bit = HWCAP2_FAMINMAX ,
513
+ .cpuinfo = "faminmax" ,
514
+ .sigill_fn = faminmax_sigill ,
515
+ },
356
516
{
357
517
.name = "FP" ,
358
518
.at_hwcap = AT_HWCAP ,
359
519
.hwcap_bit = HWCAP_FP ,
360
520
.cpuinfo = "fp" ,
361
521
.sigill_fn = fp_sigill ,
362
522
},
523
+ {
524
+ .name = "FPMR" ,
525
+ .at_hwcap = AT_HWCAP2 ,
526
+ .hwcap_bit = HWCAP2_FPMR ,
527
+ .cpuinfo = "fpmr" ,
528
+ .sigill_fn = fpmr_sigill ,
529
+ .sigill_reliable = true,
530
+ },
363
531
{
364
532
.name = "JSCVT" ,
365
533
.at_hwcap = AT_HWCAP ,
@@ -411,6 +579,13 @@ static const struct hwcap_data {
411
579
.cpuinfo = "lse128" ,
412
580
.sigill_fn = lse128_sigill ,
413
581
},
582
+ {
583
+ .name = "LUT" ,
584
+ .at_hwcap = AT_HWCAP2 ,
585
+ .hwcap_bit = HWCAP2_LUT ,
586
+ .cpuinfo = "lut" ,
587
+ .sigill_fn = lut_sigill ,
588
+ },
414
589
{
415
590
.name = "MOPS" ,
416
591
.at_hwcap = AT_HWCAP2 ,
@@ -511,6 +686,48 @@ static const struct hwcap_data {
511
686
.cpuinfo = "smef16f16" ,
512
687
.sigill_fn = smef16f16_sigill ,
513
688
},
689
+ {
690
+ .name = "SME F8F16" ,
691
+ .at_hwcap = AT_HWCAP2 ,
692
+ .hwcap_bit = HWCAP2_SME_F8F16 ,
693
+ .cpuinfo = "smef8f16" ,
694
+ .sigill_fn = smef8f16_sigill ,
695
+ },
696
+ {
697
+ .name = "SME F8F32" ,
698
+ .at_hwcap = AT_HWCAP2 ,
699
+ .hwcap_bit = HWCAP2_SME_F8F32 ,
700
+ .cpuinfo = "smef8f32" ,
701
+ .sigill_fn = smef8f32_sigill ,
702
+ },
703
+ {
704
+ .name = "SME LUTV2" ,
705
+ .at_hwcap = AT_HWCAP2 ,
706
+ .hwcap_bit = HWCAP2_SME_LUTV2 ,
707
+ .cpuinfo = "smelutv2" ,
708
+ .sigill_fn = smelutv2_sigill ,
709
+ },
710
+ {
711
+ .name = "SME SF8FMA" ,
712
+ .at_hwcap = AT_HWCAP2 ,
713
+ .hwcap_bit = HWCAP2_SME_SF8FMA ,
714
+ .cpuinfo = "smesf8fma" ,
715
+ .sigill_fn = smesf8fma_sigill ,
716
+ },
717
+ {
718
+ .name = "SME SF8DP2" ,
719
+ .at_hwcap = AT_HWCAP2 ,
720
+ .hwcap_bit = HWCAP2_SME_SF8DP2 ,
721
+ .cpuinfo = "smesf8dp2" ,
722
+ .sigill_fn = smesf8dp2_sigill ,
723
+ },
724
+ {
725
+ .name = "SME SF8DP4" ,
726
+ .at_hwcap = AT_HWCAP2 ,
727
+ .hwcap_bit = HWCAP2_SME_SF8DP4 ,
728
+ .cpuinfo = "smesf8dp4" ,
729
+ .sigill_fn = smesf8dp4_sigill ,
730
+ },
514
731
{
515
732
.name = "SVE" ,
516
733
.at_hwcap = AT_HWCAP ,
0 commit comments