Skip to content

Commit efe376a

Browse files
author
David Spickett
committed
[AArch64] Add v8.5-a Memory Tagging GMID_EL1 register
The latest version of the MTE spec added a system register 'GMID_EL1'. It contains the block size used by the LDGM and STGM instructions and is read only. The specification can be found here: https://developer.arm.com/docs/ddi0596/c llvm-svn: 357392
1 parent 30c2f20 commit efe376a

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

llvm/lib/Target/AArch64/AArch64SystemOperands.td

+1
Original file line numberDiff line numberDiff line change
@@ -1457,6 +1457,7 @@ def : RWSysReg<"TFSR_EL2", 0b11, 0b100, 0b0110, 0b0101, 0b000>;
14571457
def : RWSysReg<"TFSR_EL3", 0b11, 0b110, 0b0110, 0b0110, 0b000>;
14581458
def : RWSysReg<"TFSR_EL12", 0b11, 0b101, 0b0110, 0b0110, 0b000>;
14591459
def : RWSysReg<"TFSRE0_EL1", 0b11, 0b000, 0b0110, 0b0110, 0b001>;
1460+
def : ROSysReg<"GMID_EL1", 0b11, 0b001, 0b0000, 0b0000, 0b100>;
14601461
} // HasMTE
14611462

14621463
// Cyclone specific system registers

llvm/test/MC/AArch64/armv8.5a-mte-error.s

+20
Original file line numberDiff line numberDiff line change
@@ -553,6 +553,7 @@ mrs tfsr_el2
553553
mrs tfsr_el3
554554
mrs tfsr_el12
555555
mrs tfsre0_el1
556+
mrs gmid_el1
556557

557558
// CHECK: invalid operand for instruction
558559
// CHECK-NEXT: tco
@@ -570,6 +571,8 @@ mrs tfsre0_el1
570571
// CHECK-NEXT: tfsr_el12
571572
// CHECK: invalid operand for instruction
572573
// CHECK-NEXT: tfsre0_el1
574+
// CHECK: invalid operand for instruction
575+
// CHECK-NEXT: gmid_el1
573576

574577
mrs tco, #0
575578
mrs tco, x0
@@ -580,6 +583,7 @@ mrs tfsr_el2, x4
580583
mrs tfsr_el3, x5
581584
mrs tfsr_el12, x6
582585
mrs tfsre0_el1, x7
586+
mrs gmid_el1, x7
583587

584588
// CHECK: invalid operand for instruction
585589
// CHECK-NEXT: tco, #0
@@ -599,6 +603,8 @@ mrs tfsre0_el1, x7
599603
// CHECK-NEXT: tfsr_el12
600604
// CHECK: invalid operand for instruction
601605
// CHECK-NEXT: tfsre0_el1
606+
// CHECK: invalid operand for instruction
607+
// CHECK-NEXT: gmid_el1
602608

603609
msr tco
604610
msr gcr_el1
@@ -608,6 +614,7 @@ msr tfsr_el2
608614
msr tfsr_el3
609615
msr tfsr_el12
610616
msr tfsre0_el1
617+
msr gmid_el1
611618

612619
// CHECK: too few operands for instruction
613620
// CHECK-NEXT: tco
@@ -625,6 +632,8 @@ msr tfsre0_el1
625632
// CHECK-NEXT: tfsr_el12
626633
// CHECK: too few operands for instruction
627634
// CHECK-NEXT: tfsre0_el1
635+
// CHECK: expected writable system register or pstate
636+
// CHECK-NEXT: gmid_el1
628637

629638
msr x0, tco
630639
msr x1, gcr_el1
@@ -634,6 +643,7 @@ msr x4, tfsr_el2
634643
msr x5, tfsr_el3
635644
msr x6, tfsr_el12
636645
msr x7, tfsre0_el1
646+
msr x7, gmid_el1
637647

638648
// CHECK: expected writable system register or pstate
639649
// CHECK-NEXT: tco
@@ -651,6 +661,13 @@ msr x7, tfsre0_el1
651661
// CHECK-NEXT: tfsr_el12
652662
// CHECK: expected writable system register or pstate
653663
// CHECK-NEXT: tfsre0_el1
664+
// CHECK: expected writable system register or pstate
665+
// CHECK-NEXT: gmid_el1
666+
667+
msr gmid_el1, x7
668+
669+
// CHECK: expected writable system register or pstate
670+
// CHECK-NEXT: gmid_el1
654671

655672
// Among the system registers added by MTE, only TCO can be used with MSR (imm).
656673
// The rest can only be used with MSR (reg).
@@ -661,6 +678,7 @@ msr tfsr_el2, #4
661678
msr tfsr_el3, #5
662679
msr tfsr_el12, #6
663680
msr tfsre0_el1, #7
681+
msr gmid_el1, #7
664682

665683
// CHECK: invalid operand for instruction
666684
// CHECK-NEXT: gcr_el1
@@ -676,6 +694,8 @@ msr tfsre0_el1, #7
676694
// CHECK-NEXT: tfsr_el12
677695
// CHECK: invalid operand for instruction
678696
// CHECK-NEXT: tfsre0_el1
697+
// CHECK: expected writable system register or pstate
698+
// CHECK-NEXT: gmid_el1
679699

680700
// Xd cannot be the stack pointer, the rest can
681701
subps sp, x0, x1

llvm/test/MC/AArch64/armv8.5a-mte.s

+4
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ mrs x4, tfsr_el2
420420
mrs x5, tfsr_el3
421421
mrs x6, tfsr_el12
422422
mrs x7, tfsre0_el1
423+
mrs x7, gmid_el1
423424

424425
// CHECK: mrs x0, TCO // encoding: [0xe0,0x42,0x3b,0xd5]
425426
// CHECK: mrs x1, GCR_EL1 // encoding: [0xc1,0x10,0x38,0xd5]
@@ -429,6 +430,7 @@ mrs x7, tfsre0_el1
429430
// CHECK: mrs x5, TFSR_EL3 // encoding: [0x05,0x66,0x3e,0xd5]
430431
// CHECK: mrs x6, TFSR_EL12 // encoding: [0x06,0x66,0x3d,0xd5]
431432
// CHECK: mrs x7, TFSRE0_EL1 // encoding: [0x27,0x66,0x38,0xd5]
433+
// CHECK: mrs x7, GMID_EL1 // encoding: [0x87,0x00,0x39,0xd5]
432434

433435
// NOMTE: expected readable system register
434436
// NOMTE-NEXT: tco
@@ -446,6 +448,8 @@ mrs x7, tfsre0_el1
446448
// NOMTE-NEXT: tfsr_el12
447449
// NOMTE: expected readable system register
448450
// NOMTE-NEXT: tfsre0_el1
451+
// NOMTE: expected readable system register
452+
// NOMTE-NEXT: gmid_el1
449453

450454
msr tco, #0
451455

llvm/test/MC/Disassembler/AArch64/armv8.5a-mte.txt

+7
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@
493493
[0x05,0x66,0x3e,0xd5]
494494
[0x06,0x66,0x3d,0xd5]
495495
[0x27,0x66,0x38,0xd5]
496+
[0x88,0x00,0x39,0xd5]
496497

497498
# CHECK: mrs x0, TCO
498499
# CHECK: mrs x1, GCR_EL1
@@ -502,6 +503,7 @@
502503
# CHECK: mrs x5, TFSR_EL3
503504
# CHECK: mrs x6, TFSR_EL12
504505
# CHECK: mrs x7, TFSRE0_EL1
506+
# CHECK: mrs x8, GMID_EL1
505507

506508
# NOMTE: mrs x0, S3_3_C4_C2_7
507509
# NOMTE: mrs x1, S3_0_C1_C0_6
@@ -511,6 +513,7 @@
511513
# NOMTE: mrs x5, S3_6_C6_C6_0
512514
# NOMTE: mrs x6, S3_5_C6_C6_0
513515
# NOMTE: mrs x7, S3_0_C6_C6_1
516+
# NOMTE: mrs x8, S3_1_C0_C0_4
514517

515518
[0x9f,0x40,0x03,0xd5]
516519

@@ -525,6 +528,7 @@
525528
[0x05,0x66,0x1e,0xd5]
526529
[0x06,0x66,0x1d,0xd5]
527530
[0x27,0x66,0x18,0xd5]
531+
[0x88,0x00,0x19,0xd5]
528532

529533
# CHECK: msr TCO, x0
530534
# CHECK: msr GCR_EL1, x1
@@ -534,6 +538,8 @@
534538
# CHECK: msr TFSR_EL3, x5
535539
# CHECK: msr TFSR_EL12, x6
536540
# CHECK: msr TFSRE0_EL1, x7
541+
# GMID_EL1 is read only
542+
# CHECK: msr S3_1_C0_C0_4, x8
537543

538544
# NOMTE: msr S3_3_C4_C2_7, x0
539545
# NOMTE: msr S3_0_C1_C0_6, x1
@@ -543,3 +549,4 @@
543549
# NOMTE: msr S3_6_C6_C6_0, x5
544550
# NOMTE: msr S3_5_C6_C6_0, x6
545551
# NOMTE: msr S3_0_C6_C6_1, x7
552+
# NOMTE: msr S3_1_C0_C0_4, x8

0 commit comments

Comments
 (0)