From b594c4c873bd3e2ee560cc83bd50282ec56b01e9 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 14 May 2013 09:47:26 +0000 Subject: [PATCH] [SystemZ] Rework handling of constant PC-relative operands 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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181773 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../SystemZ/AsmParser/SystemZAsmParser.cpp | 43 +++++++++++++++++++ .../MCTargetDesc/SystemZMCCodeEmitter.cpp | 24 +++++------ lib/Target/SystemZ/SystemZOperands.td | 34 +++++++++++---- test/MC/SystemZ/insn-bras-01.s | 13 ++++++ test/MC/SystemZ/insn-brasl-01.s | 13 ++++++ test/MC/SystemZ/insn-brc-01.s | 13 ++++++ test/MC/SystemZ/insn-brc-02.s | 14 ++++++ test/MC/SystemZ/insn-brcl-01.s | 13 ++++++ test/MC/SystemZ/insn-brcl-02.s | 14 ++++++ test/MC/SystemZ/insn-cgfrl-01.s | 17 +++++--- test/MC/SystemZ/insn-cghrl-01.s | 17 +++++--- test/MC/SystemZ/insn-cgrl-01.s | 17 +++++--- test/MC/SystemZ/insn-chrl-01.s | 17 +++++--- test/MC/SystemZ/insn-clgfrl-01.s | 17 +++++--- test/MC/SystemZ/insn-clghrl-01.s | 17 +++++--- test/MC/SystemZ/insn-clgrl-01.s | 17 +++++--- test/MC/SystemZ/insn-clhrl-01.s | 17 +++++--- test/MC/SystemZ/insn-clrl-01.s | 17 +++++--- test/MC/SystemZ/insn-crl-01.s | 17 +++++--- test/MC/SystemZ/insn-larl-01.s | 17 +++++--- test/MC/SystemZ/insn-lgfrl-01.s | 17 +++++--- test/MC/SystemZ/insn-lghrl-01.s | 17 +++++--- test/MC/SystemZ/insn-lgrl-01.s | 17 +++++--- test/MC/SystemZ/insn-lhrl-01.s | 17 +++++--- test/MC/SystemZ/insn-llgfrl-01.s | 17 +++++--- test/MC/SystemZ/insn-llghrl-01.s | 17 +++++--- test/MC/SystemZ/insn-llhrl-01.s | 17 +++++--- test/MC/SystemZ/insn-lrl-01.s | 17 +++++--- test/MC/SystemZ/insn-stgrl-01.s | 17 +++++--- test/MC/SystemZ/insn-sthrl-01.s | 17 +++++--- test/MC/SystemZ/insn-strl-01.s | 17 +++++--- 31 files changed, 425 insertions(+), 130 deletions(-) diff --git a/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp b/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp index d13234cafdb..7f2159f79e1 100644 --- a/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp +++ b/lib/Target/SystemZ/AsmParser/SystemZAsmParser.cpp @@ -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 &Operands); + OperandMatchResultTy + parsePCRel(SmallVectorImpl &Operands, + int64_t MinVal, int64_t MaxVal); + OperandMatchResultTy + parsePCRel16(SmallVectorImpl &Operands) { + return parsePCRel(Operands, -(1LL << 16), (1LL << 16) - 1); + } + OperandMatchResultTy + parsePCRel32(SmallVectorImpl &Operands) { + return parsePCRel(Operands, -(1LL << 32), (1LL << 32) - 1); + } }; } @@ -653,6 +665,37 @@ parseAccessReg(SmallVectorImpl &Operands) { return MatchOperand_Success; } +SystemZAsmParser::OperandMatchResultTy SystemZAsmParser:: +parsePCRel(SmallVectorImpl &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(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 X(TheSystemZTarget); diff --git a/lib/Target/SystemZ/MCTargetDesc/SystemZMCCodeEmitter.cpp b/lib/Target/SystemZ/MCTargetDesc/SystemZMCCodeEmitter.cpp index 70a3eb94201..7721b1ffab0 100644 --- a/lib/Target/SystemZ/MCTargetDesc/SystemZMCCodeEmitter.cpp +++ b/lib/Target/SystemZ/MCTargetDesc/SystemZMCCodeEmitter.cpp @@ -162,19 +162,19 @@ SystemZMCCodeEmitter::getPCRelEncoding(const MCInst &MI, unsigned OpNum, SmallVectorImpl &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; diff --git a/lib/Target/SystemZ/SystemZOperands.td b/lib/Target/SystemZ/SystemZOperands.td index 829306f3737..770b7f5eecf 100644 --- a/lib/Target/SystemZ/SystemZOperands.td +++ b/lib/Target/SystemZ/SystemZOperands.td @@ -27,11 +27,25 @@ class Immediate let ParserMatchClass = !cast(asmop); } +// Constructs an asm operand for a PC-relative address. SIZE says how +// many bits there are. +class PCRelAsmOperand : 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 : Operand { + 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 +// address with address size VT. SELF is the name of the operand and +// ASMOP is the associated asm operand. +class PCRelAddress : ComplexPattern, - Operand { + PCRelOperand { let MIOperandInfo = (ops !cast(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 { +def brtarget16 : PCRelOperand { let EncoderMethod = "getPC16DBLEncoding"; } -def brtarget32 : Operand { +def brtarget32 : PCRelOperand { let EncoderMethod = "getPC32DBLEncoding"; } // A PC-relative offset of a global value. The offset is sign-extended // and multiplied by 2. -def pcrel32 : PCRelAddress { +def pcrel32 : PCRelAddress { 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 { +def pcrel16call : PCRelAddress { let PrintMethod = "printCallOperand"; let EncoderMethod = "getPLT16DBLEncoding"; } -def pcrel32call : PCRelAddress { +def pcrel32call : PCRelAddress { let PrintMethod = "printCallOperand"; let EncoderMethod = "getPLT32DBLEncoding"; } diff --git a/test/MC/SystemZ/insn-bras-01.s b/test/MC/SystemZ/insn-bras-01.s index 89f7f77477d..d023da6c1ec 100644 --- a/test/MC/SystemZ/insn-bras-01.s +++ b/test/MC/SystemZ/insn-bras-01.s @@ -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] diff --git a/test/MC/SystemZ/insn-brasl-01.s b/test/MC/SystemZ/insn-brasl-01.s index 86d0ced9b33..24a19ad2ccd 100644 --- a/test/MC/SystemZ/insn-brasl-01.s +++ b/test/MC/SystemZ/insn-brasl-01.s @@ -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] diff --git a/test/MC/SystemZ/insn-brc-01.s b/test/MC/SystemZ/insn-brc-01.s index a92ea45ecfc..870f1c632ef 100644 --- a/test/MC/SystemZ/insn-brc-01.s +++ b/test/MC/SystemZ/insn-brc-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-brc-02.s b/test/MC/SystemZ/insn-brc-02.s index 941cc459f38..e0af3b36871 100644 --- a/test/MC/SystemZ/insn-brc-02.s +++ b/test/MC/SystemZ/insn-brc-02.s @@ -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 diff --git a/test/MC/SystemZ/insn-brcl-01.s b/test/MC/SystemZ/insn-brcl-01.s index f7138bf5be3..f38341addfd 100644 --- a/test/MC/SystemZ/insn-brcl-01.s +++ b/test/MC/SystemZ/insn-brcl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-brcl-02.s b/test/MC/SystemZ/insn-brcl-02.s index ded5f7e4a6e..81e2fdc7f0f 100644 --- a/test/MC/SystemZ/insn-brcl-02.s +++ b/test/MC/SystemZ/insn-brcl-02.s @@ -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 diff --git a/test/MC/SystemZ/insn-cgfrl-01.s b/test/MC/SystemZ/insn-cgfrl-01.s index 2792fb4a93b..6526bf52b47 100644 --- a/test/MC/SystemZ/insn-cgfrl-01.s +++ b/test/MC/SystemZ/insn-cgfrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-cghrl-01.s b/test/MC/SystemZ/insn-cghrl-01.s index c48c5ec3efd..26b63bd2b74 100644 --- a/test/MC/SystemZ/insn-cghrl-01.s +++ b/test/MC/SystemZ/insn-cghrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-cgrl-01.s b/test/MC/SystemZ/insn-cgrl-01.s index af878cbf450..b6e61c86f1c 100644 --- a/test/MC/SystemZ/insn-cgrl-01.s +++ b/test/MC/SystemZ/insn-cgrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-chrl-01.s b/test/MC/SystemZ/insn-chrl-01.s index c133a326d2b..2c89d909db1 100644 --- a/test/MC/SystemZ/insn-chrl-01.s +++ b/test/MC/SystemZ/insn-chrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-clgfrl-01.s b/test/MC/SystemZ/insn-clgfrl-01.s index 6fc6d5eb3ba..1959b195fd3 100644 --- a/test/MC/SystemZ/insn-clgfrl-01.s +++ b/test/MC/SystemZ/insn-clgfrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-clghrl-01.s b/test/MC/SystemZ/insn-clghrl-01.s index 41c2580abde..049511afd54 100644 --- a/test/MC/SystemZ/insn-clghrl-01.s +++ b/test/MC/SystemZ/insn-clghrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-clgrl-01.s b/test/MC/SystemZ/insn-clgrl-01.s index 439bcd94ff8..24645777361 100644 --- a/test/MC/SystemZ/insn-clgrl-01.s +++ b/test/MC/SystemZ/insn-clgrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-clhrl-01.s b/test/MC/SystemZ/insn-clhrl-01.s index b424de8f667..72c9dfaf1fe 100644 --- a/test/MC/SystemZ/insn-clhrl-01.s +++ b/test/MC/SystemZ/insn-clhrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-clrl-01.s b/test/MC/SystemZ/insn-clrl-01.s index 4c6e649b439..c89c16b7e0b 100644 --- a/test/MC/SystemZ/insn-clrl-01.s +++ b/test/MC/SystemZ/insn-clrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-crl-01.s b/test/MC/SystemZ/insn-crl-01.s index 2451b4c9f82..53f5f895e03 100644 --- a/test/MC/SystemZ/insn-crl-01.s +++ b/test/MC/SystemZ/insn-crl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-larl-01.s b/test/MC/SystemZ/insn-larl-01.s index 3d0f98f562a..842f2ff28e5 100644 --- a/test/MC/SystemZ/insn-larl-01.s +++ b/test/MC/SystemZ/insn-larl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-lgfrl-01.s b/test/MC/SystemZ/insn-lgfrl-01.s index 85c9ea764c8..a016036be7e 100644 --- a/test/MC/SystemZ/insn-lgfrl-01.s +++ b/test/MC/SystemZ/insn-lgfrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-lghrl-01.s b/test/MC/SystemZ/insn-lghrl-01.s index 34992e6ff26..1acb8488580 100644 --- a/test/MC/SystemZ/insn-lghrl-01.s +++ b/test/MC/SystemZ/insn-lghrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-lgrl-01.s b/test/MC/SystemZ/insn-lgrl-01.s index 7a18908f9ab..fc719190803 100644 --- a/test/MC/SystemZ/insn-lgrl-01.s +++ b/test/MC/SystemZ/insn-lgrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-lhrl-01.s b/test/MC/SystemZ/insn-lhrl-01.s index 87925fe0987..04fb41a08a2 100644 --- a/test/MC/SystemZ/insn-lhrl-01.s +++ b/test/MC/SystemZ/insn-lhrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-llgfrl-01.s b/test/MC/SystemZ/insn-llgfrl-01.s index 85fc9f4b3c3..785dfa6330f 100644 --- a/test/MC/SystemZ/insn-llgfrl-01.s +++ b/test/MC/SystemZ/insn-llgfrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-llghrl-01.s b/test/MC/SystemZ/insn-llghrl-01.s index af3fa8b9d78..d9b0d01125e 100644 --- a/test/MC/SystemZ/insn-llghrl-01.s +++ b/test/MC/SystemZ/insn-llghrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-llhrl-01.s b/test/MC/SystemZ/insn-llhrl-01.s index 30ed4f90565..d6bf8b9813f 100644 --- a/test/MC/SystemZ/insn-llhrl-01.s +++ b/test/MC/SystemZ/insn-llhrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-lrl-01.s b/test/MC/SystemZ/insn-lrl-01.s index 32d0eeb2b84..afe862c7786 100644 --- a/test/MC/SystemZ/insn-lrl-01.s +++ b/test/MC/SystemZ/insn-lrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-stgrl-01.s b/test/MC/SystemZ/insn-stgrl-01.s index 729b01dc115..dc31a497882 100644 --- a/test/MC/SystemZ/insn-stgrl-01.s +++ b/test/MC/SystemZ/insn-stgrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-sthrl-01.s b/test/MC/SystemZ/insn-sthrl-01.s index 0bcdbd4bc8f..b0a61945589 100644 --- a/test/MC/SystemZ/insn-sthrl-01.s +++ b/test/MC/SystemZ/insn-sthrl-01.s @@ -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 diff --git a/test/MC/SystemZ/insn-strl-01.s b/test/MC/SystemZ/insn-strl-01.s index 84bd41f4c0c..a7d72455308 100644 --- a/test/MC/SystemZ/insn-strl-01.s +++ b/test/MC/SystemZ/insn-strl-01.s @@ -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