diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s index f12cdaf921fc44..14a1c9141df1ec 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64.s +++ b/src/cmd/asm/internal/asm/testdata/arm64.s @@ -1777,6 +1777,7 @@ next: MSR R17, ZCR_EL1 // 111218d5 SYS $32768, R1 // 018008d5 SYS $32768 // 1f8008d5 + MSR $1, DIT // 5f4103d5 // TLBI instruction TLBI VMALLE1IS // 1f8308d5 diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index c6601cb49e51d3..178c83c0bc6938 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -4229,6 +4229,9 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { // PSTATEfield can be special registers and special operands. if p.To.Type == obj.TYPE_REG && p.To.Reg == REG_SPSel { v = 0<<16 | 4<<12 | 5<<5 + } else if p.To.Type == obj.TYPE_REG && p.To.Reg == REG_DIT { + // op1 = 011 (3) op2 = 010 (2) + v = 3<<16 | 2<<5 } else if p.To.Type == obj.TYPE_SPECIAL { opd := SpecialOperand(p.To.Offset) for _, pf := range pstatefield {