Merge pull request #3718 from uweigand/clif-insndata
ISLE: Fix clif.isle InstructionData entries
This commit is contained in:
@@ -1200,14 +1200,12 @@ fn gen_isle(formats: &[&InstructionFormat], instructions: &AllInstructions, fmt:
|
|||||||
fmt.indent(|fmt| {
|
fmt.indent(|fmt| {
|
||||||
for format in formats {
|
for format in formats {
|
||||||
let mut s = format!("({} (opcode Opcode)", format.name);
|
let mut s = format!("({} (opcode Opcode)", format.name);
|
||||||
if format.typevar_operand.is_some() {
|
if format.has_value_list {
|
||||||
if format.has_value_list {
|
s.push_str(" (args ValueList)");
|
||||||
s.push_str(" (args ValueList)");
|
} else if format.num_value_operands == 1 {
|
||||||
} else if format.num_value_operands == 1 {
|
s.push_str(" (arg Value)");
|
||||||
s.push_str(" (arg Value)");
|
} else if format.num_value_operands > 1 {
|
||||||
} else {
|
write!(&mut s, " (args ValueArray{})", format.num_value_operands).unwrap();
|
||||||
write!(&mut s, " (args ValueArray{})", format.num_value_operands).unwrap();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for field in &format.imm_fields {
|
for field in &format.imm_fields {
|
||||||
write!(
|
write!(
|
||||||
@@ -1269,60 +1267,58 @@ fn gen_isle(formats: &[&InstructionFormat], instructions: &AllInstructions, fmt:
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Value and varargs operands.
|
// Value and varargs operands.
|
||||||
if inst.format.typevar_operand.is_some() {
|
if inst.format.has_value_list {
|
||||||
if inst.format.has_value_list {
|
// The instruction format uses a value list, but the
|
||||||
// The instruction format uses a value list, but the
|
// instruction itself might have not only a `&[Value]`
|
||||||
// instruction itself might have not only a `&[Value]`
|
// varargs operand, but also one or more `Value` operands as
|
||||||
// varargs operand, but also one or more `Value` operands as
|
// well. If this is the case, then we need to read them off
|
||||||
// well. If this is the case, then we need to read them off
|
// the front of the `ValueList`.
|
||||||
// the front of the `ValueList`.
|
let values: Vec<_> = inst
|
||||||
let values: Vec<_> = inst
|
.operands_in
|
||||||
.operands_in
|
.iter()
|
||||||
.iter()
|
.filter(|o| o.is_value())
|
||||||
.filter(|o| o.is_value())
|
.map(|o| o.name)
|
||||||
.map(|o| o.name)
|
.collect();
|
||||||
.collect();
|
let varargs = inst
|
||||||
let varargs = inst
|
.operands_in
|
||||||
.operands_in
|
.iter()
|
||||||
.iter()
|
.find(|o| o.is_varargs())
|
||||||
.find(|o| o.is_varargs())
|
.unwrap()
|
||||||
.unwrap()
|
.name;
|
||||||
.name;
|
if values.is_empty() {
|
||||||
if values.is_empty() {
|
write!(&mut s, " (value_list_slice {})", varargs).unwrap();
|
||||||
write!(&mut s, " (value_list_slice {})", varargs).unwrap();
|
|
||||||
} else {
|
|
||||||
write!(
|
|
||||||
&mut s,
|
|
||||||
" (unwrap_head_value_list_{} {} {})",
|
|
||||||
values.len(),
|
|
||||||
values.join(" "),
|
|
||||||
varargs
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
}
|
|
||||||
} else if inst.format.num_value_operands == 1 {
|
|
||||||
write!(
|
|
||||||
&mut s,
|
|
||||||
" {}",
|
|
||||||
inst.operands_in.iter().find(|o| o.is_value()).unwrap().name
|
|
||||||
)
|
|
||||||
.unwrap();
|
|
||||||
} else {
|
} else {
|
||||||
let values = inst
|
|
||||||
.operands_in
|
|
||||||
.iter()
|
|
||||||
.filter(|o| o.is_value())
|
|
||||||
.map(|o| o.name)
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
assert_eq!(values.len(), inst.format.num_value_operands);
|
|
||||||
let values = values.join(" ");
|
|
||||||
write!(
|
write!(
|
||||||
&mut s,
|
&mut s,
|
||||||
" (value_array_{} {})",
|
" (unwrap_head_value_list_{} {} {})",
|
||||||
inst.format.num_value_operands, values,
|
values.len(),
|
||||||
|
values.join(" "),
|
||||||
|
varargs
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
} else if inst.format.num_value_operands == 1 {
|
||||||
|
write!(
|
||||||
|
&mut s,
|
||||||
|
" {}",
|
||||||
|
inst.operands_in.iter().find(|o| o.is_value()).unwrap().name
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
} else if inst.format.num_value_operands > 1 {
|
||||||
|
let values = inst
|
||||||
|
.operands_in
|
||||||
|
.iter()
|
||||||
|
.filter(|o| o.is_value())
|
||||||
|
.map(|o| o.name)
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
assert_eq!(values.len(), inst.format.num_value_operands);
|
||||||
|
let values = values.join(" ");
|
||||||
|
write!(
|
||||||
|
&mut s,
|
||||||
|
" (value_array_{} {})",
|
||||||
|
inst.format.num_value_operands, values,
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Immediates.
|
// Immediates.
|
||||||
|
|||||||
@@ -349,7 +349,7 @@
|
|||||||
(BranchIcmp (opcode Opcode) (args ValueList) (cond IntCC) (destination Block))
|
(BranchIcmp (opcode Opcode) (args ValueList) (cond IntCC) (destination Block))
|
||||||
(BranchInt (opcode Opcode) (args ValueList) (cond IntCC) (destination Block))
|
(BranchInt (opcode Opcode) (args ValueList) (cond IntCC) (destination Block))
|
||||||
(BranchTable (opcode Opcode) (arg Value) (destination Block) (table JumpTable))
|
(BranchTable (opcode Opcode) (arg Value) (destination Block) (table JumpTable))
|
||||||
(Call (opcode Opcode) (func_ref FuncRef))
|
(Call (opcode Opcode) (args ValueList) (func_ref FuncRef))
|
||||||
(CallIndirect (opcode Opcode) (args ValueList) (sig_ref SigRef))
|
(CallIndirect (opcode Opcode) (args ValueList) (sig_ref SigRef))
|
||||||
(CondTrap (opcode Opcode) (arg Value) (code TrapCode))
|
(CondTrap (opcode Opcode) (arg Value) (code TrapCode))
|
||||||
(FloatCompare (opcode Opcode) (args ValueArray2) (cond FloatCC))
|
(FloatCompare (opcode Opcode) (args ValueArray2) (cond FloatCC))
|
||||||
@@ -362,11 +362,11 @@
|
|||||||
(IntCond (opcode Opcode) (arg Value) (cond IntCC))
|
(IntCond (opcode Opcode) (arg Value) (cond IntCC))
|
||||||
(IntCondTrap (opcode Opcode) (arg Value) (cond IntCC) (code TrapCode))
|
(IntCondTrap (opcode Opcode) (arg Value) (cond IntCC) (code TrapCode))
|
||||||
(IntSelect (opcode Opcode) (args ValueArray3) (cond IntCC))
|
(IntSelect (opcode Opcode) (args ValueArray3) (cond IntCC))
|
||||||
(Jump (opcode Opcode) (destination Block))
|
(Jump (opcode Opcode) (args ValueList) (destination Block))
|
||||||
(Load (opcode Opcode) (arg Value) (flags MemFlags) (offset Offset32))
|
(Load (opcode Opcode) (arg Value) (flags MemFlags) (offset Offset32))
|
||||||
(LoadComplex (opcode Opcode) (flags MemFlags) (offset Offset32))
|
(LoadComplex (opcode Opcode) (args ValueList) (flags MemFlags) (offset Offset32))
|
||||||
(LoadNoOffset (opcode Opcode) (arg Value) (flags MemFlags))
|
(LoadNoOffset (opcode Opcode) (arg Value) (flags MemFlags))
|
||||||
(MultiAry (opcode Opcode))
|
(MultiAry (opcode Opcode) (args ValueList))
|
||||||
(NullAry (opcode Opcode))
|
(NullAry (opcode Opcode))
|
||||||
(Shuffle (opcode Opcode) (args ValueArray2) (imm Immediate))
|
(Shuffle (opcode Opcode) (args ValueArray2) (imm Immediate))
|
||||||
(StackLoad (opcode Opcode) (stack_slot StackSlot) (offset Offset32))
|
(StackLoad (opcode Opcode) (stack_slot StackSlot) (offset Offset32))
|
||||||
@@ -393,7 +393,7 @@
|
|||||||
(decl jump (Block ValueSlice) Inst)
|
(decl jump (Block ValueSlice) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(jump block args)
|
(jump block args)
|
||||||
(inst_data (InstructionData.Jump (Opcode.Jump) block))
|
(inst_data (InstructionData.Jump (Opcode.Jump) (value_list_slice args) block))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl brz (Value Block ValueSlice) Inst)
|
(decl brz (Value Block ValueSlice) Inst)
|
||||||
@@ -483,19 +483,19 @@
|
|||||||
(decl return (ValueSlice) Inst)
|
(decl return (ValueSlice) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(return rvals)
|
(return rvals)
|
||||||
(inst_data (InstructionData.MultiAry (Opcode.Return)))
|
(inst_data (InstructionData.MultiAry (Opcode.Return) (value_list_slice rvals)))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl fallthrough_return (ValueSlice) Inst)
|
(decl fallthrough_return (ValueSlice) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(fallthrough_return rvals)
|
(fallthrough_return rvals)
|
||||||
(inst_data (InstructionData.MultiAry (Opcode.FallthroughReturn)))
|
(inst_data (InstructionData.MultiAry (Opcode.FallthroughReturn) (value_list_slice rvals)))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl call (FuncRef ValueSlice) Inst)
|
(decl call (FuncRef ValueSlice) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(call FN args)
|
(call FN args)
|
||||||
(inst_data (InstructionData.Call (Opcode.Call) FN))
|
(inst_data (InstructionData.Call (Opcode.Call) (value_list_slice args) FN))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl call_indirect (SigRef Value ValueSlice) Inst)
|
(decl call_indirect (SigRef Value ValueSlice) Inst)
|
||||||
@@ -597,7 +597,7 @@
|
|||||||
(decl load_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl load_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(load_complex MemFlags args Offset)
|
(load_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.LoadComplex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.LoadComplex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl store (MemFlags Value Value Offset32) Inst)
|
(decl store (MemFlags Value Value Offset32) Inst)
|
||||||
@@ -621,7 +621,7 @@
|
|||||||
(decl uload8_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl uload8_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(uload8_complex MemFlags args Offset)
|
(uload8_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Uload8Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Uload8Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl sload8 (MemFlags Value Offset32) Inst)
|
(decl sload8 (MemFlags Value Offset32) Inst)
|
||||||
@@ -633,7 +633,7 @@
|
|||||||
(decl sload8_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl sload8_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(sload8_complex MemFlags args Offset)
|
(sload8_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Sload8Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Sload8Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl istore8 (MemFlags Value Value Offset32) Inst)
|
(decl istore8 (MemFlags Value Value Offset32) Inst)
|
||||||
@@ -657,7 +657,7 @@
|
|||||||
(decl uload16_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl uload16_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(uload16_complex MemFlags args Offset)
|
(uload16_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Uload16Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Uload16Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl sload16 (MemFlags Value Offset32) Inst)
|
(decl sload16 (MemFlags Value Offset32) Inst)
|
||||||
@@ -669,7 +669,7 @@
|
|||||||
(decl sload16_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl sload16_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(sload16_complex MemFlags args Offset)
|
(sload16_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Sload16Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Sload16Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl istore16 (MemFlags Value Value Offset32) Inst)
|
(decl istore16 (MemFlags Value Value Offset32) Inst)
|
||||||
@@ -693,7 +693,7 @@
|
|||||||
(decl uload32_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl uload32_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(uload32_complex MemFlags args Offset)
|
(uload32_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Uload32Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Uload32Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl sload32 (MemFlags Value Offset32) Inst)
|
(decl sload32 (MemFlags Value Offset32) Inst)
|
||||||
@@ -705,7 +705,7 @@
|
|||||||
(decl sload32_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl sload32_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(sload32_complex MemFlags args Offset)
|
(sload32_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Sload32Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Sload32Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl istore32 (MemFlags Value Value Offset32) Inst)
|
(decl istore32 (MemFlags Value Value Offset32) Inst)
|
||||||
@@ -729,7 +729,7 @@
|
|||||||
(decl uload8x8_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl uload8x8_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(uload8x8_complex MemFlags args Offset)
|
(uload8x8_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Uload8x8Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Uload8x8Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl sload8x8 (MemFlags Value Offset32) Inst)
|
(decl sload8x8 (MemFlags Value Offset32) Inst)
|
||||||
@@ -741,7 +741,7 @@
|
|||||||
(decl sload8x8_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl sload8x8_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(sload8x8_complex MemFlags args Offset)
|
(sload8x8_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Sload8x8Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Sload8x8Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl uload16x4 (MemFlags Value Offset32) Inst)
|
(decl uload16x4 (MemFlags Value Offset32) Inst)
|
||||||
@@ -753,7 +753,7 @@
|
|||||||
(decl uload16x4_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl uload16x4_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(uload16x4_complex MemFlags args Offset)
|
(uload16x4_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Uload16x4Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Uload16x4Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl sload16x4 (MemFlags Value Offset32) Inst)
|
(decl sload16x4 (MemFlags Value Offset32) Inst)
|
||||||
@@ -765,7 +765,7 @@
|
|||||||
(decl sload16x4_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl sload16x4_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(sload16x4_complex MemFlags args Offset)
|
(sload16x4_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Sload16x4Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Sload16x4Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl uload32x2 (MemFlags Value Offset32) Inst)
|
(decl uload32x2 (MemFlags Value Offset32) Inst)
|
||||||
@@ -777,7 +777,7 @@
|
|||||||
(decl uload32x2_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl uload32x2_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(uload32x2_complex MemFlags args Offset)
|
(uload32x2_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Uload32x2Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Uload32x2Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl sload32x2 (MemFlags Value Offset32) Inst)
|
(decl sload32x2 (MemFlags Value Offset32) Inst)
|
||||||
@@ -789,7 +789,7 @@
|
|||||||
(decl sload32x2_complex (MemFlags ValueSlice Offset32) Inst)
|
(decl sload32x2_complex (MemFlags ValueSlice Offset32) Inst)
|
||||||
(extractor
|
(extractor
|
||||||
(sload32x2_complex MemFlags args Offset)
|
(sload32x2_complex MemFlags args Offset)
|
||||||
(inst_data (InstructionData.LoadComplex (Opcode.Sload32x2Complex) MemFlags Offset))
|
(inst_data (InstructionData.LoadComplex (Opcode.Sload32x2Complex) (value_list_slice args) MemFlags Offset))
|
||||||
)
|
)
|
||||||
|
|
||||||
(decl stack_load (StackSlot Offset32) Inst)
|
(decl stack_load (StackSlot Offset32) Inst)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
src/clif.isle f176ef3bba99365
|
src/clif.isle 9ea75a6f790b5c03
|
||||||
src/prelude.isle 51d2aef2566c1c96
|
src/prelude.isle 51d2aef2566c1c96
|
||||||
src/isa/aarch64/inst.isle f946561093de4ff5
|
src/isa/aarch64/inst.isle f946561093de4ff5
|
||||||
src/isa/aarch64/lower.isle 2d2e1e076a0c8a23
|
src/isa/aarch64/lower.isle 2d2e1e076a0c8a23
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
src/clif.isle f176ef3bba99365
|
src/clif.isle 9ea75a6f790b5c03
|
||||||
src/prelude.isle 51d2aef2566c1c96
|
src/prelude.isle 51d2aef2566c1c96
|
||||||
src/isa/s390x/inst.isle 63cf833b5cfd727d
|
src/isa/s390x/inst.isle 63cf833b5cfd727d
|
||||||
src/isa/s390x/lower.isle a0e21a567040bc33
|
src/isa/s390x/lower.isle a0e21a567040bc33
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
src/clif.isle f176ef3bba99365
|
src/clif.isle 9ea75a6f790b5c03
|
||||||
src/prelude.isle 51d2aef2566c1c96
|
src/prelude.isle 51d2aef2566c1c96
|
||||||
src/isa/x64/inst.isle 61004acbb1289816
|
src/isa/x64/inst.isle 61004acbb1289816
|
||||||
src/isa/x64/lower.isle 82db7f7d47ac7809
|
src/isa/x64/lower.isle 82db7f7d47ac7809
|
||||||
|
|||||||
Reference in New Issue
Block a user