[SystemZ] Rework handling of constant PC-relative operands
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Tue, 14 May 2013 09:47:26 +0000 (09:47 +0000)
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>
Tue, 14 May 2013 09:47:26 +0000 (09:47 +0000)
The GNU assembler treats things like:

        brasl   %r14, 100

in the same way as:

        brasl   %r14, .+100

rather than as a branch to absolute address 100.  We implemented this in
LLVM by creating an immediate operand rather than the usual expr operand,
and by handling immediate operands specially in the code emitter.
This was undesirable for (at least) three reasons:

- the specialness of immediate operands was exposed to the backend MC code,
  rather than being limited to the assembler parser.

- in disassembly, an immediate operand really is an absolute address.
  (Note that this means reassembling printed disassembly can't recreate
  the original code.)

- it would interfere with any assembly manipulation that we might
  try in future.  E.g. operations like branch shortening can change
  the relative position of instructions, but any code that updates
  sym+offset addresses wouldn't update an immediate "100" operand
  in the same way as an explicit ".+100" operand.

This patch changes the implementation so that the assembler creates
a "." label for immediate PC-relative operands, so that the operand
to the MCInst is always the absolute address.  The patch also adds
some error checking of the offset.

llvm-svn: 181773

31 files changed:
llvm/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp
llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCCodeEmitter.cpp
llvm/lib/Target/SystemZ/SystemZOperands.td
llvm/test/MC/SystemZ/insn-bras-01.s
llvm/test/MC/SystemZ/insn-brasl-01.s
llvm/test/MC/SystemZ/insn-brc-01.s
llvm/test/MC/SystemZ/insn-brc-02.s
llvm/test/MC/SystemZ/insn-brcl-01.s
llvm/test/MC/SystemZ/insn-brcl-02.s
llvm/test/MC/SystemZ/insn-cgfrl-01.s
llvm/test/MC/SystemZ/insn-cghrl-01.s
llvm/test/MC/SystemZ/insn-cgrl-01.s
llvm/test/MC/SystemZ/insn-chrl-01.s
llvm/test/MC/SystemZ/insn-clgfrl-01.s
llvm/test/MC/SystemZ/insn-clghrl-01.s
llvm/test/MC/SystemZ/insn-clgrl-01.s
llvm/test/MC/SystemZ/insn-clhrl-01.s
llvm/test/MC/SystemZ/insn-clrl-01.s
llvm/test/MC/SystemZ/insn-crl-01.s
llvm/test/MC/SystemZ/insn-larl-01.s
llvm/test/MC/SystemZ/insn-lgfrl-01.s
llvm/test/MC/SystemZ/insn-lghrl-01.s
llvm/test/MC/SystemZ/insn-lgrl-01.s
llvm/test/MC/SystemZ/insn-lhrl-01.s
llvm/test/MC/SystemZ/insn-llgfrl-01.s
llvm/test/MC/SystemZ/insn-llghrl-01.s
llvm/test/MC/SystemZ/insn-llhrl-01.s
llvm/test/MC/SystemZ/insn-lrl-01.s
llvm/test/MC/SystemZ/insn-stgrl-01.s
llvm/test/MC/SystemZ/insn-sthrl-01.s
llvm/test/MC/SystemZ/insn-strl-01.s

index d13234c..7f2159f 100644 (file)
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "MCTargetDesc/SystemZMCTargetDesc.h"
+#include "llvm/MC/MCContext.h"
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCInst.h"
 #include "llvm/MC/MCParser/MCParsedAsmOperand.h"
@@ -368,6 +369,17 @@ public:
   }
   OperandMatchResultTy
   parseAccessReg(SmallVectorImpl<MCParsedAsmOperand*> &Operands);
+  OperandMatchResultTy
+  parsePCRel(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
+             int64_t MinVal, int64_t MaxVal);
+  OperandMatchResultTy
+  parsePCRel16(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
+    return parsePCRel(Operands, -(1LL << 16), (1LL << 16) - 1);
+  }
+  OperandMatchResultTy
+  parsePCRel32(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
+    return parsePCRel(Operands, -(1LL << 32), (1LL << 32) - 1);
+  }
 };
 }
 
@@ -653,6 +665,37 @@ parseAccessReg(SmallVectorImpl<MCParsedAsmOperand*> &Operands) {
   return MatchOperand_Success;
 }
 
+SystemZAsmParser::OperandMatchResultTy SystemZAsmParser::
+parsePCRel(SmallVectorImpl<MCParsedAsmOperand*> &Operands,
+           int64_t MinVal, int64_t MaxVal) {
+  MCContext &Ctx = getContext();
+  MCStreamer &Out = getStreamer();
+  const MCExpr *Expr;
+  SMLoc StartLoc = Parser.getTok().getLoc();
+  if (getParser().parseExpression(Expr))
+    return MatchOperand_NoMatch;
+
+  // For consistency with the GNU assembler, treat immediates as offsets
+  // from ".".
+  if (const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(Expr)) {
+    int64_t Value = CE->getValue();
+    if ((Value & 1) || Value < MinVal || Value > MaxVal) {
+      Error(StartLoc, "offset out of range");
+      return MatchOperand_ParseFail;
+    }
+    MCSymbol *Sym = Ctx.CreateTempSymbol();
+    Out.EmitLabel(Sym);
+    const MCExpr *Base = MCSymbolRefExpr::Create(Sym, MCSymbolRefExpr::VK_None,
+                                                 Ctx);
+    Expr = Value == 0 ? Base : MCBinaryExpr::CreateAdd(Base, Expr, Ctx);
+  }
+
+  SMLoc EndLoc =
+    SMLoc::getFromPointer(Parser.getTok().getLoc().getPointer() - 1);
+  Operands.push_back(SystemZOperand::createImm(Expr, StartLoc, EndLoc));
+  return MatchOperand_Success;
+}
+
 // Force static initialization.
 extern "C" void LLVMInitializeSystemZAsmParser() {
   RegisterMCAsmParser<SystemZAsmParser> X(TheSystemZTarget);
index 70a3eb9..7721b1f 100644 (file)
@@ -162,19 +162,19 @@ SystemZMCCodeEmitter::getPCRelEncoding(const MCInst &MI, unsigned OpNum,
                                        SmallVectorImpl<MCFixup> &Fixups,
                                        unsigned Kind, int64_t Offset) const {
   const MCOperand &MO = MI.getOperand(OpNum);
-  // For compatibility with the GNU assembler, treat constant operands as
-  // unadjusted PC-relative offsets.
+  const MCExpr *Expr;
   if (MO.isImm())
-    return MO.getImm() / 2;
-
-  const MCExpr *Expr = MO.getExpr();
-  if (Offset) {
-    // The operand value is relative to the start of MI, but the fixup
-    // is relative to the operand field itself, which is Offset bytes
-    // into MI.  Add Offset to the relocation value to cancel out
-    // this difference.
-    const MCExpr *OffsetExpr = MCConstantExpr::Create(Offset, Ctx);
-    Expr = MCBinaryExpr::CreateAdd(Expr, OffsetExpr, Ctx);
+    Expr = MCConstantExpr::Create(MO.getImm() + Offset, Ctx);
+  else {
+    Expr = MO.getExpr();
+    if (Offset) {
+      // The operand value is relative to the start of MI, but the fixup
+      // is relative to the operand field itself, which is Offset bytes
+      // into MI.  Add Offset to the relocation value to cancel out
+      // this difference.
+      const MCExpr *OffsetExpr = MCConstantExpr::Create(Offset, Ctx);
+      Expr = MCBinaryExpr::CreateAdd(Expr, OffsetExpr, Ctx);
+    }
   }
   Fixups.push_back(MCFixup::Create(Offset, Expr, (MCFixupKind)Kind));
   return 0;
index 829306f..770b7f5 100644 (file)
@@ -27,11 +27,25 @@ class Immediate<ValueType vt, code pred, SDNodeXForm xform, string asmop>
   let ParserMatchClass = !cast<AsmOperandClass>(asmop);
 }
 
+// Constructs an asm operand for a PC-relative address.  SIZE says how
+// many bits there are.
+class PCRelAsmOperand<string size> : ImmediateAsmOperand<"PCRel"##size> {
+  let PredicateMethod = "isImm";
+  let ParserMethod = "parsePCRel"##size;
+}
+
+// Constructs an operand for a PC-relative address with address type VT.
+// ASMOP is the associated asm operand.
+class PCRelOperand<ValueType vt, AsmOperandClass asmop> : Operand<vt> {
+  let ParserMatchClass = asmop;
+}
+
 // Constructs both a DAG pattern and instruction operand for a PC-relative
-// address with address size VT.  SELF is the name of the operand.
-class PCRelAddress<ValueType vt, string self>
+// address with address size VT.  SELF is the name of the operand and
+// ASMOP is the associated asm operand.
+class PCRelAddress<ValueType vt, string self, AsmOperandClass asmop>
   : ComplexPattern<vt, 1, "selectPCRelAddress", [z_pcrel_wrapper]>,
-    Operand<vt> {
+    PCRelOperand<vt, asmop> {
   let MIOperandInfo = (ops !cast<Operand>(self));
 }
 
@@ -337,28 +351,32 @@ def fpimmneg0 : PatLeaf<(fpimm), [{ return N->isExactlyValue(-0.0); }]>;
 // Symbolic address operands
 //===----------------------------------------------------------------------===//
 
+// PC-relative asm operands.
+def PCRel16 : PCRelAsmOperand<"16">;
+def PCRel32 : PCRelAsmOperand<"32">;
+
 // PC-relative offsets of a basic block.  The offset is sign-extended
 // and multiplied by 2.
-def brtarget16 : Operand<OtherVT> {
+def brtarget16 : PCRelOperand<OtherVT, PCRel16> {
   let EncoderMethod = "getPC16DBLEncoding";
 }
-def brtarget32 : Operand<OtherVT> {
+def brtarget32 : PCRelOperand<OtherVT, PCRel32> {
   let EncoderMethod = "getPC32DBLEncoding";
 }
 
 // A PC-relative offset of a global value.  The offset is sign-extended
 // and multiplied by 2.
-def pcrel32 : PCRelAddress<i64, "pcrel32"> {
+def pcrel32 : PCRelAddress<i64, "pcrel32", PCRel32> {
   let EncoderMethod = "getPC32DBLEncoding";
 }
 
 // A PC-relative offset of a global value when the value is used as a
 // call target.  The offset is sign-extended and multiplied by 2.
-def pcrel16call : PCRelAddress<i64, "pcrel16call"> {
+def pcrel16call : PCRelAddress<i64, "pcrel16call", PCRel16> {
   let PrintMethod = "printCallOperand";
   let EncoderMethod = "getPLT16DBLEncoding";
 }
-def pcrel32call : PCRelAddress<i64, "pcrel32call"> {
+def pcrel32call : PCRelAddress<i64, "pcrel32call", PCRel32> {
   let PrintMethod = "printCallOperand";
   let EncoderMethod = "getPLT32DBLEncoding";
 }
index 89f7f77..d023da6 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: bras   %r0, .[[LAB:L.*]]-65536 # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL
+       bras    %r0, -0x10000
+#CHECK: bras   %r0, .[[LAB:L.*]]-2     # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL
+       bras    %r0, -2
+#CHECK: bras   %r0, .[[LAB:L.*]]       # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL
+       bras    %r0, 0
+#CHECK: bras   %r0, .[[LAB:L.*]]+65534 # encoding: [0xa7,0x05,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL
+       bras    %r0, 0xfffe
+
 #CHECK: bras   %r0, foo                # encoding: [0xa7,0x05,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL
 #CHECK: bras   %r14, foo               # encoding: [0xa7,0xe5,A,A]
index 86d0ced..24a19ad 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: brasl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       brasl   %r0, -0x100000000
+#CHECK: brasl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       brasl   %r0, -2
+#CHECK: brasl  %r0, .[[LAB:L.*]]       # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       brasl   %r0, 0
+#CHECK: brasl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc0,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       brasl   %r0, 0xfffffffe
+
 #CHECK: brasl  %r0, foo                # encoding: [0xc0,0x05,A,A,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
 #CHECK: brasl  %r14, foo               # encoding: [0xc0,0xe5,A,A,A,A]
index a92ea45..870f1c6 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: brc    0, .[[LAB:L.*]]-65536   # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-65536)+2, kind: FK_390_PC16DBL
+       brc     0, -0x10000
+#CHECK: brc    0, .[[LAB:L.*]]-2       # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC16DBL
+       brc     0, -2
+#CHECK: brc    0, .[[LAB:L.*]]         # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC16DBL
+       brc     0, 0
+#CHECK: brc    0, .[[LAB:L.*]]+65534   # encoding: [0xa7,0x04,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+65534)+2, kind: FK_390_PC16DBL
+       brc     0, 0xfffe
+
 #CHECK: brc    0, foo                  # encoding: [0xa7,0x04,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC16DBL
        brc     0, foo
index 941cc45..e0af3b3 100644 (file)
@@ -1,6 +1,20 @@
 # RUN: not llvm-mc -triple s390x-linux-gnu < %s 2> %t
 # RUN: FileCheck < %t %s
 
+#CHECK: error: offset out of range
+#CHECK: brc    0, -0x100002
+#CHECK: error: offset out of range
+#CHECK: brc    0, -1
+#CHECK: error: offset out of range
+#CHECK: brc    0, 1
+#CHECK: error: offset out of range
+#CHECK: brc    0, 0x10000
+
+       brc     0, -0x100002
+       brc     0, -1
+       brc     0, 1
+       brc     0, 0x10000
+
 #CHECK: error: invalid operand
 #CHECK: brc    foo, bar
 #CHECK: error: invalid operand
index f7138bf..f38341a 100644 (file)
@@ -1,5 +1,18 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
+#CHECK: brcl   0, .[[LAB:L.*]]-4294967296 # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       brcl    0, -0x100000000
+#CHECK: brcl   0, .[[LAB:L.*]]-2       # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       brcl    0, -2
+#CHECK: brcl   0, .[[LAB:L.*]]         # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       brcl    0, 0
+#CHECK: brcl   0, .[[LAB:L.*]]+4294967294 # encoding: [0xc0,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       brcl    0, 0xfffffffe
+
 #CHECK: brcl   0, foo                  # encoding: [0xc0,0x04,A,A,A,A]
 #CHECK:  fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
        brcl    0, foo
index ded5f7e..81e2fdc 100644 (file)
@@ -1,6 +1,20 @@
 # RUN: not llvm-mc -triple s390x-linux-gnu < %s 2> %t
 # RUN: FileCheck < %t %s
 
+#CHECK: error: offset out of range
+#CHECK: brcl   0, -0x1000000002
+#CHECK: error: offset out of range
+#CHECK: brcl   0, -1
+#CHECK: error: offset out of range
+#CHECK: brcl   0, 1
+#CHECK: error: offset out of range
+#CHECK: brcl   0, 0x100000000
+
+       brcl    0, -0x1000000002
+       brcl    0, -1
+       brcl    0, 1
+       brcl    0, 0x100000000
+
 #CHECK: error: invalid operand
 #CHECK: brcl   foo, bar
 #CHECK: error: invalid operand
index 2792fb4..6526bf5 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: cgfrl  %r0, 2864434397         # encoding: [0xc6,0x0c,0x55,0x5d,0xe6,0x6e]
-#CHECK: cgfrl  %r15, 2864434397        # encoding: [0xc6,0xfc,0x55,0x5d,0xe6,0x6e]
-
-       cgfrl   %r0,0xaabbccdd
-       cgfrl   %r15,0xaabbccdd
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, -0x100000000
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, -2
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, 0
+#CHECK: cgfrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       cgfrl   %r0, 0xfffffffe
 
 #CHECK: cgfrl  %r0, foo                # encoding: [0xc6,0x0c,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index c48c5ec..26b63bd 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: cghrl  %r0, 2864434397         # encoding: [0xc6,0x04,0x55,0x5d,0xe6,0x6e]
-#CHECK: cghrl  %r15, 2864434397        # encoding: [0xc6,0xf4,0x55,0x5d,0xe6,0x6e]
-
-       cghrl   %r0,0xaabbccdd
-       cghrl   %r15,0xaabbccdd
+#CHECK: cghrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       cghrl   %r0, -0x100000000
+#CHECK: cghrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       cghrl   %r0, -2
+#CHECK: cghrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       cghrl   %r0, 0
+#CHECK: cghrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       cghrl   %r0, 0xfffffffe
 
 #CHECK: cghrl  %r0, foo                # encoding: [0xc6,0x04,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index af878cb..b6e61c8 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: cgrl   %r0, 2864434397         # encoding: [0xc6,0x08,0x55,0x5d,0xe6,0x6e]
-#CHECK: cgrl   %r15, 2864434397        # encoding: [0xc6,0xf8,0x55,0x5d,0xe6,0x6e]
-
-       cgrl    %r0,0xaabbccdd
-       cgrl    %r15,0xaabbccdd
+#CHECK: cgrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       cgrl    %r0, -0x100000000
+#CHECK: cgrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       cgrl    %r0, -2
+#CHECK: cgrl   %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       cgrl    %r0, 0
+#CHECK: cgrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       cgrl    %r0, 0xfffffffe
 
 #CHECK: cgrl   %r0, foo                # encoding: [0xc6,0x08,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index c133a32..2c89d90 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: chrl   %r0, 2864434397         # encoding: [0xc6,0x05,0x55,0x5d,0xe6,0x6e]
-#CHECK: chrl   %r15, 2864434397        # encoding: [0xc6,0xf5,0x55,0x5d,0xe6,0x6e]
-
-       chrl    %r0,0xaabbccdd
-       chrl    %r15,0xaabbccdd
+#CHECK: chrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       chrl    %r0, -0x100000000
+#CHECK: chrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       chrl    %r0, -2
+#CHECK: chrl   %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       chrl    %r0, 0
+#CHECK: chrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       chrl    %r0, 0xfffffffe
 
 #CHECK: chrl   %r0, foo                # encoding: [0xc6,0x05,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 6fc6d5e..1959b19 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clgfrl %r0, 2864434397         # encoding: [0xc6,0x0e,0x55,0x5d,0xe6,0x6e]
-#CHECK: clgfrl %r15, 2864434397        # encoding: [0xc6,0xfe,0x55,0x5d,0xe6,0x6e]
-
-       clgfrl  %r0,0xaabbccdd
-       clgfrl  %r15,0xaabbccdd
+#CHECK: clgfrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, -0x100000000
+#CHECK: clgfrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, -2
+#CHECK: clgfrl %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, 0
+#CHECK: clgfrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clgfrl  %r0, 0xfffffffe
 
 #CHECK: clgfrl %r0, foo                # encoding: [0xc6,0x0e,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 41c2580..049511a 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clghrl %r0, 2864434397         # encoding: [0xc6,0x06,0x55,0x5d,0xe6,0x6e]
-#CHECK: clghrl %r15, 2864434397        # encoding: [0xc6,0xf6,0x55,0x5d,0xe6,0x6e]
-
-       clghrl  %r0,0xaabbccdd
-       clghrl  %r15,0xaabbccdd
+#CHECK: clghrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clghrl  %r0, -0x100000000
+#CHECK: clghrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clghrl  %r0, -2
+#CHECK: clghrl %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clghrl  %r0, 0
+#CHECK: clghrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clghrl  %r0, 0xfffffffe
 
 #CHECK: clghrl %r0, foo                # encoding: [0xc6,0x06,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 439bcd9..2464577 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clgrl  %r0, 2864434397         # encoding: [0xc6,0x0a,0x55,0x5d,0xe6,0x6e]
-#CHECK: clgrl  %r15, 2864434397        # encoding: [0xc6,0xfa,0x55,0x5d,0xe6,0x6e]
-
-       clgrl   %r0,0xaabbccdd
-       clgrl   %r15,0xaabbccdd
+#CHECK: clgrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clgrl   %r0, -0x100000000
+#CHECK: clgrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clgrl   %r0, -2
+#CHECK: clgrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clgrl   %r0, 0
+#CHECK: clgrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0a,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clgrl   %r0, 0xfffffffe
 
 #CHECK: clgrl  %r0, foo                # encoding: [0xc6,0x0a,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index b424de8..72c9dfa 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clhrl  %r0, 2864434397         # encoding: [0xc6,0x07,0x55,0x5d,0xe6,0x6e]
-#CHECK: clhrl  %r15, 2864434397        # encoding: [0xc6,0xf7,0x55,0x5d,0xe6,0x6e]
-
-       clhrl   %r0,0xaabbccdd
-       clhrl   %r15,0xaabbccdd
+#CHECK: clhrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clhrl   %r0, -0x100000000
+#CHECK: clhrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clhrl   %r0, -2
+#CHECK: clhrl  %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clhrl   %r0, 0
+#CHECK: clhrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clhrl   %r0, 0xfffffffe
 
 #CHECK: clhrl  %r0, foo                # encoding: [0xc6,0x07,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 4c6e649..c89c16b 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: clrl   %r0, 2864434397         # encoding: [0xc6,0x0f,0x55,0x5d,0xe6,0x6e]
-#CHECK: clrl   %r15, 2864434397        # encoding: [0xc6,0xff,0x55,0x5d,0xe6,0x6e]
-
-       clrl    %r0,0xaabbccdd
-       clrl    %r15,0xaabbccdd
+#CHECK: clrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       clrl    %r0, -0x100000000
+#CHECK: clrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       clrl    %r0, -2
+#CHECK: clrl   %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       clrl    %r0, 0
+#CHECK: clrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       clrl    %r0, 0xfffffffe
 
 #CHECK: clrl   %r0, foo                # encoding: [0xc6,0x0f,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 2451b4c..53f5f89 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: crl    %r0, 2864434397         # encoding: [0xc6,0x0d,0x55,0x5d,0xe6,0x6e]
-#CHECK: crl    %r15, 2864434397        # encoding: [0xc6,0xfd,0x55,0x5d,0xe6,0x6e]
-
-       crl     %r0,0xaabbccdd
-       crl     %r15,0xaabbccdd
+#CHECK: crl    %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       crl     %r0, -0x100000000
+#CHECK: crl    %r0, .[[LAB:L.*]]-2     # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       crl     %r0, -2
+#CHECK: crl    %r0, .[[LAB:L.*]]       # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       crl     %r0, 0
+#CHECK: crl    %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc6,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       crl     %r0, 0xfffffffe
 
 #CHECK: crl    %r0, foo                # encoding: [0xc6,0x0d,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 3d0f98f..842f2ff 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: larl   %r0, 2864434397         # encoding: [0xc0,0x00,0x55,0x5d,0xe6,0x6e]
-#CHECK: larl   %r15, 2864434397        # encoding: [0xc0,0xf0,0x55,0x5d,0xe6,0x6e]
-
-       larl    %r0,0xaabbccdd
-       larl    %r15,0xaabbccdd
+#CHECK: larl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       larl    %r0, -0x100000000
+#CHECK: larl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       larl    %r0, -2
+#CHECK: larl   %r0, .[[LAB:L.*]]       # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       larl    %r0, 0
+#CHECK: larl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc0,0x00,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       larl    %r0, 0xfffffffe
 
 #CHECK: larl   %r0, foo                # encoding: [0xc0,0x00,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 85c9ea7..a016036 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lgfrl  %r0, 2864434397         # encoding: [0xc4,0x0c,0x55,0x5d,0xe6,0x6e]
-#CHECK: lgfrl  %r15, 2864434397        # encoding: [0xc4,0xfc,0x55,0x5d,0xe6,0x6e]
-
-       lgfrl   %r0,0xaabbccdd
-       lgfrl   %r15,0xaabbccdd
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, -0x100000000
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, -2
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, 0
+#CHECK: lgfrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0c,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lgfrl   %r0, 0xfffffffe
 
 #CHECK: lgfrl  %r0, foo                # encoding: [0xc4,0x0c,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 34992e6..1acb848 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lghrl  %r0, 2864434397         # encoding: [0xc4,0x04,0x55,0x5d,0xe6,0x6e]
-#CHECK: lghrl  %r15, 2864434397        # encoding: [0xc4,0xf4,0x55,0x5d,0xe6,0x6e]
-
-       lghrl   %r0,0xaabbccdd
-       lghrl   %r15,0xaabbccdd
+#CHECK: lghrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lghrl   %r0, -0x100000000
+#CHECK: lghrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lghrl   %r0, -2
+#CHECK: lghrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lghrl   %r0, 0
+#CHECK: lghrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x04,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lghrl   %r0, 0xfffffffe
 
 #CHECK: lghrl  %r0, foo                # encoding: [0xc4,0x04,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 7a18908..fc71919 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lgrl   %r0, 2864434397         # encoding: [0xc4,0x08,0x55,0x5d,0xe6,0x6e]
-#CHECK: lgrl   %r15, 2864434397        # encoding: [0xc4,0xf8,0x55,0x5d,0xe6,0x6e]
-
-       lgrl    %r0,0xaabbccdd
-       lgrl    %r15,0xaabbccdd
+#CHECK: lgrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lgrl    %r0, -0x100000000
+#CHECK: lgrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lgrl    %r0, -2
+#CHECK: lgrl   %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lgrl    %r0, 0
+#CHECK: lgrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x08,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lgrl    %r0, 0xfffffffe
 
 #CHECK: lgrl   %r0, foo                # encoding: [0xc4,0x08,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 87925fe..04fb41a 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lhrl   %r0, 2864434397         # encoding: [0xc4,0x05,0x55,0x5d,0xe6,0x6e]
-#CHECK: lhrl   %r15, 2864434397        # encoding: [0xc4,0xf5,0x55,0x5d,0xe6,0x6e]
-
-       lhrl    %r0,0xaabbccdd
-       lhrl    %r15,0xaabbccdd
+#CHECK: lhrl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lhrl    %r0, -0x100000000
+#CHECK: lhrl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lhrl    %r0, -2
+#CHECK: lhrl   %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lhrl    %r0, 0
+#CHECK: lhrl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x05,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lhrl    %r0, 0xfffffffe
 
 #CHECK: lhrl   %r0, foo                # encoding: [0xc4,0x05,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 85fc9f4..785dfa6 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: llgfrl %r0, 2864434397         # encoding: [0xc4,0x0e,0x55,0x5d,0xe6,0x6e]
-#CHECK: llgfrl %r15, 2864434397        # encoding: [0xc4,0xfe,0x55,0x5d,0xe6,0x6e]
-
-       llgfrl  %r0,0xaabbccdd
-       llgfrl  %r15,0xaabbccdd
+#CHECK: llgfrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, -0x100000000
+#CHECK: llgfrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, -2
+#CHECK: llgfrl %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, 0
+#CHECK: llgfrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0e,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       llgfrl  %r0, 0xfffffffe
 
 #CHECK: llgfrl %r0, foo                # encoding: [0xc4,0x0e,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index af3fa8b..d9b0d01 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: llghrl %r0, 2864434397         # encoding: [0xc4,0x06,0x55,0x5d,0xe6,0x6e]
-#CHECK: llghrl %r15, 2864434397        # encoding: [0xc4,0xf6,0x55,0x5d,0xe6,0x6e]
-
-       llghrl  %r0,0xaabbccdd
-       llghrl  %r15,0xaabbccdd
+#CHECK: llghrl %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       llghrl  %r0, -0x100000000
+#CHECK: llghrl %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       llghrl  %r0, -2
+#CHECK: llghrl %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       llghrl  %r0, 0
+#CHECK: llghrl %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x06,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       llghrl  %r0, 0xfffffffe
 
 #CHECK: llghrl %r0, foo                # encoding: [0xc4,0x06,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 30ed4f9..d6bf8b9 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: llhrl  %r0, 2864434397         # encoding: [0xc4,0x02,0x55,0x5d,0xe6,0x6e]
-#CHECK: llhrl  %r15, 2864434397        # encoding: [0xc4,0xf2,0x55,0x5d,0xe6,0x6e]
-
-       llhrl   %r0,0xaabbccdd
-       llhrl   %r15,0xaabbccdd
+#CHECK: llhrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       llhrl   %r0, -0x100000000
+#CHECK: llhrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       llhrl   %r0, -2
+#CHECK: llhrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       llhrl   %r0, 0
+#CHECK: llhrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x02,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       llhrl   %r0, 0xfffffffe
 
 #CHECK: llhrl  %r0, foo                # encoding: [0xc4,0x02,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 32d0eeb..afe862c 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: lrl    %r0, 2864434397         # encoding: [0xc4,0x0d,0x55,0x5d,0xe6,0x6e]
-#CHECK: lrl    %r15, 2864434397        # encoding: [0xc4,0xfd,0x55,0x5d,0xe6,0x6e]
-
-       lrl     %r0,0xaabbccdd
-       lrl     %r15,0xaabbccdd
+#CHECK: lrl    %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       lrl     %r0, -0x100000000
+#CHECK: lrl    %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       lrl     %r0, -2
+#CHECK: lrl    %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       lrl     %r0, 0
+#CHECK: lrl    %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0d,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       lrl     %r0, 0xfffffffe
 
 #CHECK: lrl    %r0, foo                # encoding: [0xc4,0x0d,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 729b01d..dc31a49 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: stgrl  %r0, 2864434397         # encoding: [0xc4,0x0b,0x55,0x5d,0xe6,0x6e]
-#CHECK: stgrl  %r15, 2864434397        # encoding: [0xc4,0xfb,0x55,0x5d,0xe6,0x6e]
-
-       stgrl   %r0,0xaabbccdd
-       stgrl   %r15,0xaabbccdd
+#CHECK: stgrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       stgrl   %r0, -0x100000000
+#CHECK: stgrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       stgrl   %r0, -2
+#CHECK: stgrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       stgrl   %r0, 0
+#CHECK: stgrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0b,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       stgrl   %r0, 0xfffffffe
 
 #CHECK: stgrl  %r0, foo                # encoding: [0xc4,0x0b,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 0bcdbd4..b0a6194 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: sthrl  %r0, 2864434397         # encoding: [0xc4,0x07,0x55,0x5d,0xe6,0x6e]
-#CHECK: sthrl  %r15, 2864434397        # encoding: [0xc4,0xf7,0x55,0x5d,0xe6,0x6e]
-
-       sthrl   %r0,0xaabbccdd
-       sthrl   %r15,0xaabbccdd
+#CHECK: sthrl  %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       sthrl   %r0, -0x100000000
+#CHECK: sthrl  %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       sthrl   %r0, -2
+#CHECK: sthrl  %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       sthrl   %r0, 0
+#CHECK: sthrl  %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x07,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       sthrl   %r0, 0xfffffffe
 
 #CHECK: sthrl  %r0, foo                # encoding: [0xc4,0x07,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL
index 84bd41f..a7d7245 100644 (file)
@@ -1,10 +1,17 @@
 # RUN: llvm-mc -triple s390x-linux-gnu -show-encoding %s | FileCheck %s
 
-#CHECK: strl   %r0, 2864434397         # encoding: [0xc4,0x0f,0x55,0x5d,0xe6,0x6e]
-#CHECK: strl   %r15, 2864434397        # encoding: [0xc4,0xff,0x55,0x5d,0xe6,0x6e]
-
-       strl    %r0,0xaabbccdd
-       strl    %r15,0xaabbccdd
+#CHECK: strl   %r0, .[[LAB:L.*]]-4294967296 # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-4294967296)+2, kind: FK_390_PC32DBL
+       strl    %r0, -0x100000000
+#CHECK: strl   %r0, .[[LAB:L.*]]-2     # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]-2)+2, kind: FK_390_PC32DBL
+       strl    %r0, -2
+#CHECK: strl   %r0, .[[LAB:L.*]]       # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: .[[LAB]]+2, kind: FK_390_PC32DBL
+       strl    %r0, 0
+#CHECK: strl   %r0, .[[LAB:L.*]]+4294967294 # encoding: [0xc4,0x0f,A,A,A,A]
+#CHECK:  fixup A - offset: 2, value: (.[[LAB]]+4294967294)+2, kind: FK_390_PC32DBL
+       strl    %r0, 0xfffffffe
 
 #CHECK: strl   %r0, foo                # encoding: [0xc4,0x0f,A,A,A,A]
 # fixup A - offset: 2, value: foo+2, kind: FK_390_PC32DBL