From 2f95d5f10344967ff36b84d442c7b40d501f77f5 Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Fri, 28 Feb 2020 11:03:14 +0000 Subject: [PATCH] [ARM][Thumb2] support .w assembler qualifier for dmb/dsb/isb Support the explicit wide assembler qualifier for the dmb/dsb/isb synchronization barrier instructions. Differential revision: https://reviews.llvm.org/D75143 --- llvm/lib/Target/ARM/ARMInstrThumb2.td | 6 ++++++ llvm/test/MC/ARM/basic-thumb2-instructions.s | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/llvm/lib/Target/ARM/ARMInstrThumb2.td b/llvm/lib/Target/ARM/ARMInstrThumb2.td index 270e9bc..c6e2e04 100644 --- a/llvm/lib/Target/ARM/ARMInstrThumb2.td +++ b/llvm/lib/Target/ARM/ARMInstrThumb2.td @@ -4894,9 +4894,15 @@ def : t2InstAlias<"tst${p} $Rn, $Rm", (t2TSTrr rGPR:$Rn, rGPR:$Rm, pred:$p)>; // Memory barriers +def : InstAlias<"dmb${p}.w\t$opt", (t2DMB memb_opt:$opt, pred:$p), 0>, Requires<[HasDB]>; def : InstAlias<"dmb${p}", (t2DMB 0xf, pred:$p), 0>, Requires<[HasDB]>; +def : InstAlias<"dmb${p}.w", (t2DMB 0xf, pred:$p), 0>, Requires<[HasDB]>; +def : InstAlias<"dsb${p}.w\t$opt", (t2DSB memb_opt:$opt, pred:$p), 0>, Requires<[HasDB]>; def : InstAlias<"dsb${p}", (t2DSB 0xf, pred:$p), 0>, Requires<[HasDB]>; +def : InstAlias<"dsb${p}.w", (t2DSB 0xf, pred:$p), 0>, Requires<[HasDB]>; +def : InstAlias<"isb${p}.w\t$opt", (t2ISB memb_opt:$opt, pred:$p), 0>, Requires<[HasDB]>; def : InstAlias<"isb${p}", (t2ISB 0xf, pred:$p), 0>, Requires<[HasDB]>; +def : InstAlias<"isb${p}.w", (t2ISB 0xf, pred:$p), 0>, Requires<[HasDB]>; // Non-predicable aliases of a predicable DSB: the predicate is (14, 0) where // 14 = AL (always execute) and 0 = "instruction doesn't read the CPSR". diff --git a/llvm/test/MC/ARM/basic-thumb2-instructions.s b/llvm/test/MC/ARM/basic-thumb2-instructions.s index d344b66..e02b12e 100644 --- a/llvm/test/MC/ARM/basic-thumb2-instructions.s +++ b/llvm/test/MC/ARM/basic-thumb2-instructions.s @@ -674,6 +674,7 @@ adds sp, #-4096 dmb #0x0 dmb sy + dmb.w sy dmb st dmb sh dmb ish @@ -686,6 +687,7 @@ adds sp, #-4096 dmb osh dmb oshst dmb + dmb.w @ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] @ CHECK: dmb st @ encoding: [0xbf,0xf3,0x5e,0x8f] @@ -705,6 +707,7 @@ adds sp, #-4096 @ CHECK: dmb #0x0 @ encoding: [0xbf,0xf3,0x50,0x8f] @ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] +@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] @ CHECK: dmb st @ encoding: [0xbf,0xf3,0x5e,0x8f] @ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f] @ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f] @@ -717,6 +720,7 @@ adds sp, #-4096 @ CHECK: dmb osh @ encoding: [0xbf,0xf3,0x53,0x8f] @ CHECK: dmb oshst @ encoding: [0xbf,0xf3,0x52,0x8f] @ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] +@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f] @------------------------------------------------------------------------------ @@ -740,6 +744,7 @@ adds sp, #-4096 dsb #0x0 dsb sy + dsb.w sy dsb st dsb sh dsb ish @@ -752,6 +757,7 @@ adds sp, #-4096 dsb osh dsb oshst dsb + dsb.w @ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] @ CHECK: dsb st @ encoding: [0xbf,0xf3,0x4e,0x8f] @@ -771,6 +777,7 @@ adds sp, #-4096 @ CHECK: ssbb @ encoding: [0xbf,0xf3,0x40,0x8f] @ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] +@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] @ CHECK: dsb st @ encoding: [0xbf,0xf3,0x4e,0x8f] @ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f] @ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f] @@ -783,6 +790,7 @@ adds sp, #-4096 @ CHECK: dsb osh @ encoding: [0xbf,0xf3,0x43,0x8f] @ CHECK: dsb oshst @ encoding: [0xbf,0xf3,0x42,0x8f] @ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] +@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f] @------------------------------------------------------------------------------ @@ -809,13 +817,17 @@ adds sp, #-4096 @ ISB @------------------------------------------------------------------------------ isb sy + isb.w sy isb + isb.w isb #15 isb #1 @ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] @ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] @ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] +@ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] +@ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f] @ CHECK: isb #0x1 @ encoding: [0xbf,0xf3,0x61,0x8f] -- 2.7.4