Add operand kind and format for unsigned 128-bit immediates
This commit is contained in:
@@ -5,6 +5,7 @@ pub fn define(immediates: &OperandKinds, entities: &OperandKinds) -> FormatRegis
|
||||
// Shorthands for immediates.
|
||||
let uimm8 = immediates.by_name("uimm8");
|
||||
let uimm32 = immediates.by_name("uimm32");
|
||||
let uimm128 = immediates.by_name("uimm128");
|
||||
let imm64 = immediates.by_name("imm64");
|
||||
let ieee32 = immediates.by_name("ieee32");
|
||||
let ieee64 = immediates.by_name("ieee64");
|
||||
@@ -30,6 +31,7 @@ pub fn define(immediates: &OperandKinds, entities: &OperandKinds) -> FormatRegis
|
||||
|
||||
registry.insert(Builder::new("Unary").value());
|
||||
registry.insert(Builder::new("UnaryImm").imm(imm64));
|
||||
registry.insert(Builder::new("UnaryImm128").imm(uimm128));
|
||||
registry.insert(Builder::new("UnaryIeee32").imm(ieee32));
|
||||
registry.insert(Builder::new("UnaryIeee64").imm(ieee64));
|
||||
registry.insert(Builder::new("UnaryBool").imm(boolean));
|
||||
|
||||
@@ -29,6 +29,16 @@ pub fn define() -> Vec<OperandKind> {
|
||||
.build();
|
||||
kinds.push(uimm32);
|
||||
|
||||
// An unsigned 128-bit immediate integer operand.
|
||||
//
|
||||
// This operand is used to pass entire 128-bit vectors as immediates to
|
||||
// instructions like const.
|
||||
let uimm128 = Builder::new_imm("uimm128")
|
||||
.doc("A 128-bit immediate unsigned integer.")
|
||||
.rust_type("ir::Constant")
|
||||
.build();
|
||||
kinds.push(uimm128);
|
||||
|
||||
// A 32-bit immediate signed offset.
|
||||
//
|
||||
// This is used to represent an immediate address offset in load/store
|
||||
|
||||
@@ -30,6 +30,7 @@ pub fn define(
|
||||
let uimm8 = immediates.by_name("uimm8");
|
||||
let uimm32 = immediates.by_name("uimm32");
|
||||
let imm64 = immediates.by_name("imm64");
|
||||
let uimm128 = immediates.by_name("uimm128");
|
||||
let offset32 = immediates.by_name("offset32");
|
||||
let memflags = immediates.by_name("memflags");
|
||||
let ieee32 = immediates.by_name("ieee32");
|
||||
@@ -1088,6 +1089,22 @@ pub fn define(
|
||||
.operands_out(vec![a]),
|
||||
);
|
||||
|
||||
let N = &operand_doc("N", uimm128, "The 16 immediate bytes of a 128-bit vector");
|
||||
let a = &operand_doc("a", TxN, "A constant vector value");
|
||||
|
||||
ig.push(
|
||||
Inst::new(
|
||||
"vconst",
|
||||
r#"
|
||||
SIMD vector constant.
|
||||
|
||||
Construct a vector with the given immediate bytes.
|
||||
"#,
|
||||
)
|
||||
.operands_in(vec![N])
|
||||
.operands_out(vec![a]),
|
||||
);
|
||||
|
||||
let a = &operand_doc("a", Ref, "A constant reference null value");
|
||||
|
||||
ig.push(
|
||||
|
||||
Reference in New Issue
Block a user