Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 47 additions & 25 deletions llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2331,6 +2331,7 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
bool CanUse64BitLiterals =
AsmParser->has64BitLiterals() &&
!(InstDesc.TSFlags & (SIInstrFlags::VOP3 | SIInstrFlags::VOP3P));
LitModifier Lit = getModifiers().Lit;
MCContext &Ctx = AsmParser->getContext();

if (Imm.IsFPImm) { // We got fp literal token
Expand Down Expand Up @@ -2364,10 +2365,23 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo

if ((OpTy == AMDGPU::OPERAND_REG_IMM_FP64 ||
OpTy == AMDGPU::OPERAND_REG_INLINE_C_FP64 ||
OpTy == AMDGPU::OPERAND_REG_INLINE_AC_FP64) &&
CanUse64BitLiterals && Lo_32(Val) != 0) {
Inst.addOperand(MCOperand::createExpr(
AMDGPUMCExpr::createLit(LitModifier::Lit64, Val, Ctx)));
OpTy == AMDGPU::OPERAND_REG_INLINE_AC_FP64)) {
if (CanUse64BitLiterals && Lit == LitModifier::None &&
(isInt<32>(Val) || isUInt<32>(Val))) {
// The floating-point operand will be verbalized as an
// integer one. If that integer happens to fit 32 bits, on
// re-assembling it will be intepreted as the high half of
// the actual value, so we have to wrap it into lit64().
Lit = LitModifier::Lit64;
} else if (Lit == LitModifier::Lit) {
// For FP64 operands lit() specifies the high half of the value.
Val = Hi_32(Val);
}
}

if (Lit != LitModifier::None) {
Inst.addOperand(
MCOperand::createExpr(AMDGPUMCExpr::createLit(Lit, Val, Ctx)));
} else {
Inst.addOperand(MCOperand::createImm(Val));
}
Expand All @@ -2380,9 +2394,13 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
llvm_unreachable("fp literal in 64-bit integer instruction.");

case AMDGPU::OPERAND_KIMM64:
if (CanUse64BitLiterals && Lo_32(Val) != 0) {
Inst.addOperand(MCOperand::createExpr(
AMDGPUMCExpr::createLit(LitModifier::Lit64, Val, Ctx)));
if (CanUse64BitLiterals && Lit == LitModifier::None &&
(isInt<32>(Val) || isUInt<32>(Val)))
Lit = LitModifier::Lit64;

if (Lit != LitModifier::None) {
Inst.addOperand(
MCOperand::createExpr(AMDGPUMCExpr::createLit(Lit, Val, Ctx)));
} else {
Inst.addOperand(MCOperand::createImm(Val));
}
Expand Down Expand Up @@ -2471,13 +2489,12 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
// truncated to uint32_t), if the target doesn't support 64-bit literals, or
// the lit modifier is explicitly used, we need to truncate it to the 32
// LSBs.
if (!AsmParser->has64BitLiterals() ||
getModifiers().Lit == LitModifier::Lit)
if (!AsmParser->has64BitLiterals() || Lit == LitModifier::Lit)
Val = Lo_32(Val);

if (CanUse64BitLiterals && (!isInt<32>(Val) || !isUInt<32>(Val))) {
Inst.addOperand(MCOperand::createExpr(
AMDGPUMCExpr::createLit(LitModifier::Lit64, Val, Ctx)));
if (Lit != LitModifier::None) {
Inst.addOperand(
MCOperand::createExpr(AMDGPUMCExpr::createLit(Lit, Val, Ctx)));
} else {
Inst.addOperand(MCOperand::createImm(Val));
}
Expand All @@ -2501,15 +2518,18 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
// 1) explicitly forced by using lit modifier;
// 2) the value is a valid 32-bit representation (signed or unsigned),
// meanwhile not forced by lit64 modifier.
if (getModifiers().Lit == LitModifier::Lit ||
(getModifiers().Lit != LitModifier::Lit64 &&
(isInt<32>(Val) || isUInt<32>(Val))))
if (Lit == LitModifier::Lit ||
(Lit != LitModifier::Lit64 && (isInt<32>(Val) || isUInt<32>(Val))))
Val = static_cast<uint64_t>(Val) << 32;
}

if (CanUse64BitLiterals && Lo_32(Val) != 0) {
Inst.addOperand(MCOperand::createExpr(
AMDGPUMCExpr::createLit(LitModifier::Lit64, Val, Ctx)));
// For FP64 operands lit() specifies the high half of the value.
if (Lit == LitModifier::Lit)
Val = Hi_32(Val);

if (Lit != LitModifier::None) {
Inst.addOperand(
MCOperand::createExpr(AMDGPUMCExpr::createLit(Lit, Val, Ctx)));
} else {
Inst.addOperand(MCOperand::createImm(Val));
}
Expand All @@ -2530,13 +2550,12 @@ void AMDGPUOperand::addLiteralImmOperand(MCInst &Inst, int64_t Val, bool ApplyMo
return;

case AMDGPU::OPERAND_KIMM64:
if ((isInt<32>(Val) || isUInt<32>(Val)) &&
getModifiers().Lit != LitModifier::Lit64)
if ((isInt<32>(Val) || isUInt<32>(Val)) && Lit != LitModifier::Lit64)
Val <<= 32;

if (CanUse64BitLiterals && Lo_32(Val) != 0) {
Inst.addOperand(MCOperand::createExpr(
AMDGPUMCExpr::createLit(LitModifier::Lit64, Val, Ctx)));
if (Lit != LitModifier::None) {
Inst.addOperand(
MCOperand::createExpr(AMDGPUMCExpr::createLit(Lit, Val, Ctx)));
} else {
Inst.addOperand(MCOperand::createImm(Val));
}
Expand Down Expand Up @@ -4814,12 +4833,15 @@ bool AMDGPUAsmParser::validateSOPLiteral(const MCInst &Inst,
const MCOperand &MO = Inst.getOperand(OpIdx);
// Exclude special imm operands (like that used by s_set_gpr_idx_on)
if (AMDGPU::isSISrcOperand(Desc, OpIdx)) {
bool IsLit = false;
std::optional<int64_t> Imm;
if (MO.isImm()) {
Imm = MO.getImm();
} else if (MO.isExpr()) {
if (isLitExpr(MO.getExpr()))
if (isLitExpr(MO.getExpr())) {
IsLit = true;
Imm = getLitValue(MO.getExpr());
}
} else {
continue;
}
Expand All @@ -4829,7 +4851,7 @@ bool AMDGPUAsmParser::validateSOPLiteral(const MCInst &Inst,
} else if (!isInlineConstant(Inst, OpIdx)) {
auto OpType = static_cast<AMDGPU::OperandType>(
Desc.operands()[OpIdx].OperandType);
int64_t Value = encode32BitLiteral(*Imm, OpType);
int64_t Value = encode32BitLiteral(*Imm, OpType, IsLit);
if (NumLiterals == 0 || LiteralValue != Value) {
LiteralValue = Value;
++NumLiterals;
Expand Down
10 changes: 5 additions & 5 deletions llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1545,7 +1545,7 @@ AMDGPUDisassembler::decodeMandatoryLiteral64Constant(uint64_t Val) const {
HasLiteral = true;
Literal = Literal64 = Val;

bool UseLit64 = Lo_32(Literal64) != 0;
bool UseLit64 = Hi_32(Literal64) == 0;
return UseLit64 ? MCOperand::createExpr(AMDGPUMCExpr::createLit(
LitModifier::Lit64, Literal64, getContext()))
: MCOperand::createImm(Literal64);
Expand Down Expand Up @@ -1578,11 +1578,11 @@ MCOperand AMDGPUDisassembler::decodeLiteralConstant(const MCInstrDesc &Desc,
if (CanUse64BitLiterals) {
if (OpDesc.OperandType == AMDGPU::OPERAND_REG_IMM_INT64 ||
OpDesc.OperandType == AMDGPU::OPERAND_REG_INLINE_C_INT64)
UseLit64 = !isInt<32>(Val) || !isUInt<32>(Val);
UseLit64 = false;
else if (OpDesc.OperandType == AMDGPU::OPERAND_REG_IMM_FP64 ||
OpDesc.OperandType == AMDGPU::OPERAND_REG_INLINE_C_FP64 ||
OpDesc.OperandType == AMDGPU::OPERAND_REG_INLINE_AC_FP64)
UseLit64 = Lo_32(Val) != 0;
UseLit64 = Hi_32(Literal64) == 0;
}

return UseLit64 ? MCOperand::createExpr(AMDGPUMCExpr::createLit(
Expand All @@ -1608,12 +1608,12 @@ AMDGPUDisassembler::decodeLiteral64Constant(const MCInst &Inst) const {
const MCOperandInfo &OpDesc = Desc.operands()[Inst.getNumOperands()];
if (OpDesc.OperandType == AMDGPU::OPERAND_REG_IMM_INT64 ||
OpDesc.OperandType == AMDGPU::OPERAND_REG_INLINE_C_INT64) {
UseLit64 = !isInt<32>(Literal64) || !isUInt<32>(Literal64);
UseLit64 = false;
} else {
assert(OpDesc.OperandType == AMDGPU::OPERAND_REG_IMM_FP64 ||
OpDesc.OperandType == AMDGPU::OPERAND_REG_INLINE_C_FP64 ||
OpDesc.OperandType == AMDGPU::OPERAND_REG_INLINE_AC_FP64);
UseLit64 = Lo_32(Literal64) != 0;
UseLit64 = Hi_32(Literal64) == 0;
}

return UseLit64 ? MCOperand::createExpr(AMDGPUMCExpr::createLit(
Expand Down
9 changes: 6 additions & 3 deletions llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCCodeEmitter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -452,13 +452,16 @@ void AMDGPUMCCodeEmitter::encodeInstruction(const MCInst &MI,
// Yes! Encode it
int64_t Imm = 0;

bool IsLit = false;
if (Op.isImm())
Imm = Op.getImm();
else if (Op.isExpr()) {
if (const auto *C = dyn_cast<MCConstantExpr>(Op.getExpr()))
if (const auto *C = dyn_cast<MCConstantExpr>(Op.getExpr())) {
Imm = C->getValue();
else if (AMDGPU::isLitExpr(Op.getExpr()))
} else if (AMDGPU::isLitExpr(Op.getExpr())) {
IsLit = true;
Imm = AMDGPU::getLitValue(Op.getExpr());
}
} else // Exprs will be replaced with a fixup value.
llvm_unreachable("Must be immediate or expr");

Expand All @@ -468,7 +471,7 @@ void AMDGPUMCCodeEmitter::encodeInstruction(const MCInst &MI,
} else {
auto OpType =
static_cast<AMDGPU::OperandType>(Desc.operands()[i].OperandType);
Imm = AMDGPU::encode32BitLiteral(Imm, OpType);
Imm = AMDGPU::encode32BitLiteral(Imm, OpType, IsLit);
support::endian::write<uint32_t>(CB, Imm, llvm::endianness::little);
}

Expand Down
4 changes: 2 additions & 2 deletions llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3149,7 +3149,7 @@ bool isValid32BitLiteral(uint64_t Val, bool IsFP64) {
return isUInt<32>(Val) || isInt<32>(Val);
}

int64_t encode32BitLiteral(int64_t Imm, OperandType Type) {
int64_t encode32BitLiteral(int64_t Imm, OperandType Type, bool IsLit) {
switch (Type) {
default:
break;
Expand All @@ -3172,7 +3172,7 @@ int64_t encode32BitLiteral(int64_t Imm, OperandType Type) {
case OPERAND_REG_INLINE_C_INT32:
return Lo_32(Imm);
case OPERAND_REG_IMM_FP64:
return Hi_32(Imm);
return IsLit ? Imm : Hi_32(Imm);
}
return Imm;
}
Expand Down
2 changes: 1 addition & 1 deletion llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -1724,7 +1724,7 @@ LLVM_READNONE
bool isValid32BitLiteral(uint64_t Val, bool IsFP64);

LLVM_READNONE
int64_t encode32BitLiteral(int64_t Imm, OperandType Type);
int64_t encode32BitLiteral(int64_t Imm, OperandType Type, bool IsLit);

bool isArgPassedInSGPR(const Argument *Arg);

Expand Down
50 changes: 28 additions & 22 deletions llvm/test/MC/AMDGPU/gfx1250_asm_salu_lit64.s
Original file line number Diff line number Diff line change
@@ -1,64 +1,70 @@
// RUN: llvm-mc -triple=amdgcn -show-encoding -mcpu=gfx1250 %s | FileCheck --check-prefix=GFX1250 %s
// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5
// RUN: llvm-mc -triple=amdgcn -show-encoding -mcpu=gfx1250 %s | FileCheck --check-prefixes=GFX1250,GFX1250-ASM %s
// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1250 -show-encoding %s | %extract-encodings | llvm-mc -triple=amdgcn -mcpu=gfx1250 -disassemble -show-encoding | FileCheck --check-prefixes=GFX1250,GFX1250-DIS %s

s_mov_b64 s[2:3], 0x10abcdef12345678
// GFX1250: s_mov_b64 s[2:3], lit64(0x10abcdef12345678) ; encoding: [0xfe,0x01,0x82,0xbe,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_mov_b64 s[2:3], 0x10abcdef12345678 ; encoding: [0xfe,0x01,0x82,0xbe,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_add_nc_u64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_add_nc_u64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0xa9,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_add_nc_u64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0xa9,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_mul_u64 s[2:3], 0x10abcdef12345678, s[4:5]
// GFX1250: s_mul_u64 s[2:3], lit64(0x10abcdef12345678), s[4:5] ; encoding: [0xfe,0x04,0x82,0xaa,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_mul_u64 s[2:3], 0x10abcdef12345678, s[4:5] ; encoding: [0xfe,0x04,0x82,0xaa,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_and_b64 s[2:3], 0x10abcdef12345678, s[4:5]
// GFX1250: s_and_b64 s[2:3], lit64(0x10abcdef12345678), s[4:5] ; encoding: [0xfe,0x04,0x82,0x8b,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_and_b64 s[2:3], 0x10abcdef12345678, s[4:5] ; encoding: [0xfe,0x04,0x82,0x8b,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_or_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_or_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x8c,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_or_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x8c,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_xor_b64 s[2:3], 0x10abcdef12345678, s[4:5]
// GFX1250: s_xor_b64 s[2:3], lit64(0x10abcdef12345678), s[4:5] ; encoding: [0xfe,0x04,0x82,0x8d,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_xor_b64 s[2:3], 0x10abcdef12345678, s[4:5] ; encoding: [0xfe,0x04,0x82,0x8d,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_and_not1_b64 s[2:3], 0x10abcdef12345678, 0x10abcdef12345678
// GFX1250: s_and_not1_b64 s[2:3], lit64(0x10abcdef12345678), lit64(0x10abcdef12345678) ; encoding: [0xfe,0xfe,0x82,0x91,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_and_not1_b64 s[2:3], 0x10abcdef12345678, 0x10abcdef12345678 ; encoding: [0xfe,0xfe,0x82,0x91,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_or_not1_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_or_not1_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x92,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_or_not1_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x92,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_andn2_b64 s[2:3], 0x10abcdef12345678, s[4:5]
// GFX1250: s_and_not1_b64 s[2:3], lit64(0x10abcdef12345678), s[4:5] ; encoding: [0xfe,0x04,0x82,0x91,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_and_not1_b64 s[2:3], 0x10abcdef12345678, s[4:5] ; encoding: [0xfe,0x04,0x82,0x91,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_orn2_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_or_not1_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x92,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_or_not1_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x92,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_nand_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_nand_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x8e,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_nand_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x8e,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_nor_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_nor_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x8f,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_nor_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x8f,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_xnor_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_xnor_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_xnor_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x90,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_lshl_b64 s[2:3], 0x10abcdef12345678, s4
// GFX1250: s_lshl_b64 s[2:3], lit64(0x10abcdef12345678), s4 ; encoding: [0xfe,0x04,0x82,0x84,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_lshl_b64 s[2:3], 0x10abcdef12345678, s4 ; encoding: [0xfe,0x04,0x82,0x84,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_lshr_b64 s[2:3], 0x10abcdef12345678, s4
// GFX1250: s_lshr_b64 s[2:3], lit64(0x10abcdef12345678), s4 ; encoding: [0xfe,0x04,0x82,0x85,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_lshr_b64 s[2:3], 0x10abcdef12345678, s4 ; encoding: [0xfe,0x04,0x82,0x85,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_ashr_i64 s[2:3], 0x10abcdef12345678, s4
// GFX1250: s_ashr_i64 s[2:3], lit64(0x10abcdef12345678), s4 ; encoding: [0xfe,0x04,0x82,0x86,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_ashr_i64 s[2:3], 0x10abcdef12345678, s4 ; encoding: [0xfe,0x04,0x82,0x86,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_bfe_u64 s[2:3], 0x10abcdef12345678, 5
// GFX1250: s_bfe_u64 s[2:3], lit64(0x10abcdef12345678), 5 ; encoding: [0xfe,0x85,0x02,0x94,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_bfe_u64 s[2:3], 0x10abcdef12345678, 5 ; encoding: [0xfe,0x85,0x02,0x94,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_bfe_i64 s[2:3], 0x80abcdef12345678, 5
// GFX1250: s_bfe_i64 s[2:3], lit64(0x80abcdef12345678), 5 ; encoding: [0xfe,0x85,0x82,0x94,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x80]
// GFX1250: s_bfe_i64 s[2:3], 0x80abcdef12345678, 5 ; encoding: [0xfe,0x85,0x82,0x94,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x80]

s_cselect_b64 s[2:3], s[4:5], 0x10abcdef12345678
// GFX1250: s_cselect_b64 s[2:3], s[4:5], lit64(0x10abcdef12345678) ; encoding: [0x04,0xfe,0x82,0x98,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]
// GFX1250: s_cselect_b64 s[2:3], s[4:5], 0x10abcdef12345678 ; encoding: [0x04,0xfe,0x82,0x98,0x78,0x56,0x34,0x12,0xef,0xcd,0xab,0x10]

s_mov_b64 s[2:3], 0xffffffff01234567
// GFX1250: s_mov_b64 s[2:3], lit64(0xffffffff01234567) ; encoding: [0xfe,0x01,0x82,0xbe,0x67,0x45,0x23,0x01,0xff,0xff,0xff,0xff]
// GFX1250: s_mov_b64 s[2:3], 0xffffffff01234567 ; encoding: [0xfe,0x01,0x82,0xbe,0x67,0x45,0x23,0x01,0xff,0xff,0xff,0xff]

s_mov_b64 s[2:3], lit64(0x777)
// GFX1250: s_mov_b64 s[2:3], 0x777 ; encoding: [0xff,0x01,0x82,0xbe,0x77,0x07,0x00,0x00]
// GFX1250-ASM: s_mov_b64 s[2:3], lit64(0x777) ; encoding: [0xff,0x01,0x82,0xbe,0x77,0x07,0x00,0x00]
// GFX1250-DIS: s_mov_b64 s[2:3], 0x777 ; encoding: [0xff,0x01,0x82,0xbe,0x77,0x07,0x00,0x00]

s_mov_b64 s[2:3], 0x777
// GFX1250: s_mov_b64 s[2:3], 0x777 ; encoding: [0xff,0x01,0x82,0xbe,0x77,0x07,0x00,0x00]
Loading